をご利用くださいALAssetLibrary
。これを行うにはAssetsLibrary.framework
、プロジェクトに を追加し、以下のコードを記述します。
ファイル名は次のようになりますassets-library://asset/asset.JPG?id=1000000194&ext=JPG
NSString *fileName = @"assets-library://asset/asset.JPG?id=1000000194&ext=JPG";
typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
UIImage *images = nil;
if (iref)
{
images = [UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]];
//doing UI operation on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
yourImageView.image = images;
});
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"can't get image");
};
NSURL *asseturl = [NSURL URLWithString:fileName];
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
[assetslibrary assetForURL:asseturl
resultBlock:resultblock
failureBlock:failureblock];
ノート:
iOS 5 にアップグレードし、コードをリファクタリングして ARC を利用すると、次のようなエラーが発生します。
所有する ALAssetsLibraryrefactoring の有効期間を過ぎて ALAssetPrivate にアクセスしようとする無効な試み ARC を利用する
ALAssetLibrary
これを解決するには、静的メソッドを追加してクラスの共有インスタンスを取得します。
+ (ALAssetsLibrary *)defaultAssetsLibrary {
static dispatch_once_t pred = 0;
static ALAssetsLibrary *library = nil;
dispatch_once(&pred, ^{
library = [[ALAssetsLibrary alloc] init];
});
return library;
}
次に、を使用してアクセスします[MyClass defaultAssetsLibrary];
[[MyClass defaultAssetsLibrary] assetForURL:asseturl
resultBlock:resultblock
failureBlock:failureblock];