Я реализовал свой собственный UIImagePickerController
, который позволяет пользователю получать доступ к изображениям из своих библиотек фотографий.Как и в традиционном UIImagePickerController
, пользователь выбирает фотографию из списка миниатюр, и затем фотография отображается на следующем экране.Я использую библиотеку ALAssets
для этого.
Проблема, которую я пытаюсь решить, заключается в том, как загрузить изображение, как приложение для фотографий, после выбора его миниатюры.Загрузка фотографий большего размера может занять некоторое время, что приведет к небольшому сбоям и сделает переход очень плавным.
Похоже, что приложение для фотографий сначала загружает миниатюру изображения, а затем обновляет его полным изображением после завершения загрузки.Я смог сделать это с помощью следующего кода, используя функцию [ALAsset aspectRatioThumbnail]
:
UIImageView *imageViewTemp = [[UIImageView alloc] initWithImage: [UIImage imageWithCGImage:[self.asset aspectRatioThumbnail]]];
[self setImageView: imageViewTemp];
[[self scrollView] addSubview:[self imageView]];
[[self scrollView] setContentSize: [self.imageView.image size]];
[self setMaxMinZoomScalesForCurrentBounds];
[[self scrollView] setZoomScale: [[self scrollView] minimumZoomScale]];
[imageViewTemp release];
dispatch_async(dispatch_get_global_queue(0, 0), ^
{
CGImageRef imageRef = CGImageCreateCopy(self.asset.defaultRepresentation.fullScreenImage);
dispatch_async(dispatch_get_main_queue(), ^
{
UIImage *image = [[UIImage imageWithCGImage: imageRef] retain];
[[self imageView] setImage: image];
[image release];
CGImageRelease(imageRef);
});
});
Проблема с этим кодом в том, что aspectRatioThumbnail
работает только для ios 5 или выше, плюс я заметил, что дажес aspectRatioThumbnail
возможен небольшой сбой для больших изображений перед их кэшированием.
Так что я поиграл с использованием [asset thumbnail]
, однако проблема в том, что миниатюра, которая возвращается, является квадратной, поэтому она выглядит забавно, когда вы загружаете реальное изображение.Я попытался найти некоторые способы получить размер полноразмерного изображения, чтобы я мог растянуть его, но не похоже, что есть отличный способ сделать это (http://stackoverflow.com/questions/10067765/alasset-image-size).
Так что мне просто интересноесли кто-нибудь знает, как это сделать, это будет работать для ios4 и выше и работать довольно гладко. Возможно, что [ALAssetRepresentation CGImageWithOptions]
может содержать ответ?