我在滚动视图上显示大图像时遇到了问题,图像是2,4-4,7 MB。它在3GS和模拟器上运行良好。但是每当我尝试在3G或iPod Touch 2G上运行时,它就会崩溃。
我在网上搜索发现了"imageNamed是邪恶的“这篇文章。好的,我将所有的映像调用都更改为imageWithContentsOfFile:但是它仍然崩溃,我看到的唯一不同是,在我离开视图之后,现在图像被取消了。但是内存的使用率仍然很高。
这是一张乐器的截图。

第一个峰值是我在启动时显示的视频,然后在桌面视图中显示了大量的图像,直到那时没有问题。

当我输入1,1mb - 2576 x 1000图片时,

当我输入4,8mb - 7822 x 1000图片时,
顺便说一下,该应用程序是在iOS 4和3.1.2上测试的。
你有什么建议吗?因为这个问题把我逼疯了。
从现在起非常感谢!
发布于 2010-09-20 00:48:48
我最后使用了UIWebView,我不得不使用更小的( MB,而不是尺寸)图像,但它正在工作,唯一的问题是我不能缩放.使用scalePageToFit,我可以缩放,但图像适合水平,而不是垂直,那是这样。
我会尽量更新这个问题。
如果有人有这个问题,我会建议使用webview或适配器版本的three20图像查看器,更好地处理内存。
发布于 2010-09-09 19:31:16
最近,我在3G上测试一个应用程序时遇到了同样的问题。最后,我缩小了任何超过最大像素数的图像(我发现200万像素似乎在我的3G上可靠工作,但HotPaw2的答案似乎表明,100万像素可能是一个更安全的赌注)。
UIImage *image = // ...;
if (image.size.width * image.size.height > MAX_PIXELS) {
// calculate the scaling factor that will reduce the image size to MAX_PIXELS
float actualHeight = image.size.height;
float actualWidth = image.size.width;
float scale = sqrt(image.size.width * image.size.height / MAX_PIXELS);
// resize the image
CGRect rect = CGRectMake(0.0, 0.0, floorf(actualWidth / scale), floorf(actualHeight / scale));
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
UIImage *imageToDraw = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// imageToDraw is a scaled version of image that preserves the aspect ratio
}苹果还提供了一个开发图片库应用程序的例子,该应用程序使用CATiledLayer绘制非常大的图像。他们的例子使用的图像已经被分割成适当大小的瓦片提前。在您的iOS应用程序中,可以动态地将图像分割成块,但是在设备上这样做非常慢。关于PhotoScroller示例,请查看今年的WWDC的第104号会话。
发布于 2010-09-09 18:37:43
iPhone 3G和iPod Touch 1G/2G中的GPU只有1k×1k纹理的空间,这似乎也适用于2D图像渲染。任何更大的需要平铺,以适应硬件图形渲染器。
3GS和更新版本有一个不同的GPU,可以支持更大的纹理,因此图像。
https://stackoverflow.com/questions/3679457
复制相似问题