Да, Photos.app кэширует изображения с более низким разрешением. Хорошая новость заключается в том, что вы также можете использовать эти кэшированные версии. Вы, вероятно, уже знаете о свойстве fullScreenImage ALAssetRepresentation и свойстве миниатюр ALAsset. Они должны быть загружены намного быстрее.
Что я нашел с изображениями высокого разрешения, так это то, что простая загрузка может занять 1-2 секунды, поэтому я предполагаю, что простая загрузка изображения с высоким разрешением на заднем плане может помочь вам.
Итак, как загрузить версию изображения с низким разрешением, а затем переключиться на версию с высоким разрешением, когда у вас есть i ?. Это может быть немного сложно, но, надеюсь, это поможет вам начать. Поскольку вы используете AssetsLibrary, вам придется использовать iOS 4, что является хорошей новостью, поскольку вы можете сделать это довольно легко с помощью блоков и GCD / libdispatch. Я рад, что вы смотрите видео WWDC - проверьте сеансы 206 и 211, чтобы получить много полезной информации о 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
});
});
}