gpt4 book ai didi

iphone - 如何制作具有快速显示的大图像的 UIScrollView(如 Photos.app)?

转载 作者:行者123 更新时间:2023-11-28 17:47:35 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的图像查看器来查看 ALAssetRepresentation 的全分辨率图像。事实证明并没有那么简单。

我的第一个方法是在 UIScrollView 中制作一个大的 UIImageView。虽然这确实有效,但速度非常慢。

使用“照片”应用程序时,当您触摸图像时,较大的版本会立即打开。首先,绘制的是分辨率非常低的图像。但很快,一幅更高分辨率的图像出现了。此外,如果我放大,图像首先会降低分辨率,然后分辨率会增加。

我查看了 WWDC 2010 主题演讲 #104,其中描述了 Photos.app 的工作原理。但是我应该如何实现呢?在主题演讲中,演示使用了预先平铺的图像,这是我无法从 ALAssetRepresentation 中获得的。我试过只加载全分辨率版本并使用 CATiledLayer 绘制它,虽然它在缩放等方面并不慢,但在绘制图 block 时太慢了。

Photos.app 是否在某处缓存了所有图像的较低分辨率版本或发生了什么?有关如何操作的一些指示会有所帮助。

最佳答案

是的,Photos.app 正在缓存较低分辨率的图像。好消息是您也可以获得那些缓存版本。您可能已经知道 ALAssetRepresentation 的 fullScreenImage 属性和 ALAsset 的缩略图属性。这些应该会更快加载。

我发现高分辨率图像仅加载它可能需要 1-2 秒,所以我猜测仅在后台加载高分辨率图像可能对您有用。

那么,如何加载图像的低分辨率版本,然后在有 i 时切换到高分辨率版本?它可能有点复杂,但希望这可以帮助您入门。由于您使用的是 AssetsLibrary,因此您将不得不使用 iOS 4,这是个好消息,因为您可以使用 block 和 GCD/libdispatch 相当轻松地做到这一点。很高兴您正在观看 WWDC 视频——查看第 206 和 211 节 session ,了解有关 GCD 的大量重要信息。

基本思路是,您将在主线程上显示较低分辨率的版本,然后要求后台线程加载全分辨率图像,然后告诉 CATiledLayer 切换到全分辨率图像。

- (void)displayAsset:(ALAssetRepresentation *)asset {
UIImage *lowresImage = [UIImage imageWithCGImage:asset.fullScreenImage
orientation:asset.orientation scale:asset.scale];
// Add code here to display the lowresImage

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^ {
// Load the full resolution image from the asset
UIImage *highresImage = [UIImage imageWithCGImage:asset.fullResolutionImage
orientation:asset.orientation
scale:asset.scale];

// Once done, tell the main thread to display the tiles
dispatch_async( dispatch_get_main_queue(),
^ {
// Code to swap out the lowresImage for highresImage
});
});

}

关于iphone - 如何制作具有快速显示的大图像的 UIScrollView(如 Photos.app)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com