Bear with me as I am new to obj-c but I have a UIScrollView and a segmented button that switches between 2 images that are presented in the scrollview. Each image is large and roughly 500Kb, but they are each causing allocations of 20+ MB and crashing my app.
- (void)viewDidLoad {
[bvpiscrollview setContentSize:CGSizeMake(768, 2484)];
UIImage *loadBvImage = [UIImage imageNamed:@"bpi_1536x4965v2.png"];
bvpiimg.image = loadBvImage;
[loadBvImage release];
[super viewDidLoad];
}
-(UIView *)viewForZoomingInScrollView:bvpiscrollview{
return bvpiimg;
}
-(IBAction)pidonebutton{
[self.view removeFromSuperview];
}
-(IBAction)segmentedControlIndexChanged{
switch (self.segmentedControl.selectedSegmentIndex)
{
case 0:
[bvpiscrollview setContentSize:CGSizeMake(768, 2484)];
UIImage *loadBvImage = [UIImage imageNamed:@"bpi_1536x4965v2.png"];
bvpiimg.image = loadBvImage;
[loadBvImage release];
break;
case 1:
[bvpiscrollview setContentSize:CGSizeMake(768, 2556)];
UIImage *loadMpImage = [UIImage imageNamed:@"mpi_1536x5110v2.png"];
bvpiimg.image = loadMpImage;
[loadMpImage release];
default:
break;
}
}
- (void)dealloc {
[bvpiimg release];
[bvpiscrollview release];
[segmentedControl release];
[super dealloc];
}
@end
A 500k RGBA image would be about 350 pixels square. A 1536 x 5110 pixel RGBA image is about 31.4 MB. You seem to be confusing image size with file size.
The largest size supported across all iOS devices is 1024 pixels on a side, although some support larger dimensions. Try cutting up your large images into smaller tiles before adding them to a view in the view hierarchy. You can cut the image up at runtime with a series of calls to
CGImageCreateWithImageInRect. I usually choose 512 pixel or smaller tiles.