ユーザーがデバイス ギャラリーの画像の 1 つを選択できるようにする新しいプロジェクトを開始しました。
と を使用してこれを達成しようとしてImageView
いUIStepper
ます。
ギャラリー内のすべての画像を配列に書き込みimageView
、ステッパーの + および - ボタンを使用して配列をナビゲートしたい (クリックに応じて現在の配列位置 +1 または -1 を選択する)。
前の議論のとおり、ここにプロジェクトがあります: AssetLibraryPhotosViewer
大規模なテストは行っていませんが、シミュレーターと実際のデバイスの両方で問題なく動作するようです
@Exothug は、全画面表示の写真にアクセスするデバイス ライブラリを列挙する方法のアイデアを提供します。
ALAssetsLibrary* assetLibrary = [[ALAssetsLibrary alloc] init];
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[group enumerateAssetsUsingBlock:^(ALAsset* asset, NSUInteger index, BOOL* innerstop) {
if (asset) {
ALAssetRepresentation *rep = [asset defaultRepresentation];
CGImageRef iref = [rep fullScreenImage];
if (iref) {
UIImage *image = [UIImage imageWithCGImage:iref scale:rep.scale
orientation:(UIImageOrientation)rep.orientation];
// process the image here
}
}
}];
}
} failureBlock:^(NSError *error) {
NSLog(@"failure: %@", [error localizedDescription]);
}];
画像を配列に追加して処理することもできますが、ライブラリ内の画像の数によっては、最も効果的ではない場合があります。別のアプローチは、画像の URL / インデックスを使用してライブラリを反復処理し、必要に応じてライブラリから画像を取得して ImageView に表示することです。
特定の画像グループが必要な場合は、ディレクトリを選択してください。
NSMutableArray *result = [NSMutableArray array];
[[[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:nil] enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
NSString *path = [obj lastPathComponent];
[result addObject:path];
];