在UIScrollView中缩放和滚动大图像

时间:2011-09-06 18:18:26

标签: iphone uiscrollview uiimageview core-animation catiledlayer

我已经坚持了很长一段时间。我看了很多其他答案,也看了Apple的例子。

我想知道的是如何在UIScrollView中加载大图像,并能够浏览它们并放大它们,例如照片应用程序。

我正在开发一个应用程序,我需要滚动浏览大图像(大图,我的意思是大于1024 x 1024的图像)。我已经实现了与照片应用程序类似的功能。但是,现在我正在使用大图像,我得到了内存警告和内容。我知道为什么我会收到警告,而且我知道我需要平铺图片

Apple的示例展示了已经存在的小图像的平铺。我的应用程序将下载多个图像,将它们保存在磁盘上,用户可以在以后查看它们。因此,我无法使用其他程序剪切图像。

我需要能够平铺全尺寸图像的东西。任何帮助将不胜感激。另外,正如我之前提到的,我知道我必须对Tiling做点什么。但是,我是新手,如果答案中包含一些示例代码,我会非常感激,我可以将其作为起点。

我已经看过其他问题了,似乎没有一个问题得到满意的回答,因此,我再次提出这个问题。

再次感谢!

1 个答案:

答案 0 :(得分:3)

要使用平铺,您需要在视图中使用CaTiledLayer。谷歌搜索它将为您提供良好的信息。基本上你声明UIVIew正在使用它,声明某些级别的缩放细节,而在drawRect中你会收到每个tile作为rect参数。

要平铺图像,请加载UIImage(它使用内存,但显示它很少)并使用您想要的每个图块:

UIGraphicsBeginImageContextWithOptions(tileSize, YES, 1);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, -tileSize.width * columnNumber, -tileSize.height*rowNumber);
[img drawInRect:CGRectMake(0, 0, tileSize.width, tileSize.height)];
UIImage* imgCut = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

并保存imgCut。如果您在CATiledLayer中使用不同级别的细节,则可能需要使用不同的缩放生成平铺。