写真データの列挙
ALAssetsLibraryを使えばOSに保存された写真を列挙できる。
- AssetsLibrary.frameworkをリンク
- AssetsLibrary/AssetsLibrary.hを#import
- ALAssetsGroupのposterImageやALAssetのthumbnailから縮小画像を取得できるが解像度がかなり低い
- 写真の列挙には時間がかかるので、別スレッドで処理する
- 別スレッドで生成したUIViewはperformSelectorOnMainThreadにて追加する
50枚程度でも待ちきれないほど時間がかかるので、通常は別スレッドで非同期処理にする。その際、画像ごとにUIViewを生成するのであれば、addSubViewをperformSelectorOnMainThreadで呼び出してやれば、1枚ずつ画像を表示できる。
この中で、ALAssetからはthumbnail(75x75)、ALAssetsGroupからはposterImage(90x90)経由で小さめの画像がすぐに取得できるが、解像度が小さすぎるので用途は限られる。アプリによってはサムネイル画像も自分で作ったほうがよい。
//#import <AssetsLibrary/AssetsLibrary.h> ALAssetsLibrary *assetsLib = [[ALAssetsLibraryalloc] init]; [assetsLib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { if (result) { ALAssetRepresentation *rep = [result defaultRepresentation]; CGImageRef imageRef = [rep fullResolutionImage]; //[scrollView performSelectorOnMainThread:@selector(addSubview:) // withObject:imageView waitUntilDone:NO]; } } ]; } failureBlock:nil]; [assetsLib release];