2010-01-24 102 views
2

嘿家伙首先我得到了一张图片视图的图像是2900x2100,文件大小约为4MB我也有一个滚动视图来移动图像。 无论如何它坠毁,首先我​​虽然是因为4MB的大小。然后我调整它的大小,使它成为1287x1234和1.3MB,但是当我放大太多时它变成了像素。 之后,我设法使它与1.5 MB的2900x2100!所以我在我的设备上运行它,它仍然崩溃!iPhone:Image查看图片大小限制

任何人都知道这是为什么? 这是我在调试器控制台上得到的结果

编程接收信号:“0”。

警告:check_safe_call:无法恢复当前帧

这里有更多的信息,这是我的viewDidLoad方法:

的UIImageView * tempimage = [[UIImageView的页头] 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)当我滚动图像

问候

它不会崩溃

卡洛斯巴尔

+1

问题不完整。发布崩溃日志或任何您在控制台中看到的内容。 – 2010-01-24 17:33:00

回答

5

原因为什么你的应用程序崩溃是因为你使用的图片太大。
根据UIImage的类参考,它说您应该避免创建尺寸为的大于1024 x 1024的UIImage对象。

如果向UIImageView对象添加具有比1024 x 1024大的图像的UIImage对象,则您的应用程序可能会崩溃。如果你很幸运,有时你的应用程序不会崩溃。

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]; 
    } 
} 
3

图像的文件大小在这里并不重要:UIImage将不得不解压缩并将解压缩的图像存储在内存中。每个像素通常需要4个字节,这意味着2900 x 2100像素图像将占用超过24 MB的内存。在iPhone或iPhone 3G上,您可能没有那么多的内存可用于您的整个程序。

也许尝试将其拆分成较小的图像,然后在用户滚动视图时根据需要加载它们。只需将它切成大约320x480左右的大小(iPhone的屏幕大小),然后只将可见磁贴添加到UIScrollView中,并在用户滚动时将其删除,并且它们变得不可见。