嘿伙计们先把照片放到2900x2100的图像视图中,文件大小约为4MB我还有一个滚动视图来移动图像。 无论如何它崩溃了,首先我虽然是因为4MB大小。然后我调整了它的大小,使它成为1287x1234和1.3MB,但是当我将它放大太多时它会像素化。 之后我设法用1.5 MB制作2900x2100!所以我在我的设备上运行它仍然崩溃!!
有人知道为什么吗? 这是我在调试器控制台上得到的内容
编程收到信号:“0”。
警告:check_safe_call:无法恢复当前帧
这里有更多信息,这是我的viewDidLoad方法:
UIImageView * tempimage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@“sanlucasFLAT.jpg”]];
self._FLatLucasImageView = tempimage;
[tempimage release];
_FLatLucasImageView.frame = CGRectMake(-7,0,800,800);
_FLatLucasImageView.contentMode = UIViewContentModeScaleAspectFit;
_FlatLucasScrollView.contentSize = CGSizeMake(_FLatLucasImageView.frame.size.width,_FLatLucasImageView.frame.size.height);
_FlatLucasScrollView.delegate = self;
_FlatLucasScrollView.clipsToBounds = YES;
[_ FlatLucasScrollView addSubview:_FLatLucasImageView];
[_ FLatLucasImageView release];
当我将CGRectMake设置为:(0,0,2900,2961)时,滚动图像时不会崩溃
最好的问候
卡洛斯巴尔加斯
答案 0 :(得分:5)
你的应用程序崩溃的原因是因为你使用的图片太大了
根据UIImage的类引用,它表示你应该避免创建大小超过1024 x 1024的UIImage对象。
如果向UIImageView对象添加图像大于1024 x 1024的UIImage对象,则应用程序可能会崩溃。如果你很幸运,有时你的应用程序不会崩溃。
答案 1 :(得分:3)
图像的文件大小在这里并不重要:UIImage必须将其解压缩并将解压缩的图像存储在内存中。每个像素通常需要4个字节,这意味着2900 x 2100像素的图像将占用超过24 MB的内存。在iPhone或iPhone 3G上,你的整个程序甚至可能没有那么多的内存。
也许尝试将其拆分为较小的图像,然后在用户滚动视图时根据需要加载它们。只需将其切割成约320x480左右的瓷砖(iPhone的屏幕尺寸),然后只将可见的瓷砖添加到UIScrollView,并在用户滚动时将其删除,它们将变为不可见。
答案 2 :(得分:1)
这段代码非常混乱。几件事:
话虽如此,我的猜测是你过度释放了图像视图。尝试删除最后[_FLatLucasImageView release]
。
如果您在将图像视图添加到滚动视图后不需要访问该图像视图,那么我建议您完全删除实例变量和属性,只需使用以下代码:
UIImage* image = [UIImage imageNamed: @"sanlucasFLAT.jpg"];
if (image != nil)
{
UIImageView* imageView = [[[UIImageView alloc] initWithImage: image] autorelease];
if (imageView != nil)
{
imageView.frame = CGRectMake(-7, 0, 800, 800);
imageView.contentMode = UIViewContentModeScaleAspectFit;
flatLucasScrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
flatLucasScrollView.delegate = self;
flatLucasScrollView.clipsToBounds = YES;
[flatLucasScrollView addSubview: imageView];
}
}