9

ユーザーが写真アプリですべてのアルバムを並べたリストの順序を維持する方法はありますか? 私は一日中これを修正しようとしてきましたが、アプリで表示する順序を維持するために何が欠けているのかわかりません。

ユーザーは写真アプリでアルバムを並べ替えることができるため、順序を維持したいので、UI をリストの順序に一致させたいと考えています。

リストを設定するために使用しているコード:

PHFetchResult *smartAlbumFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:
PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];

PHFetchResult *albumFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:
PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];

NSArray *collectionFetches = @[smartAlbumFetchResult, albumFetchResult];

NSMutableArray *albumArray = [NSMutableArray new];

for (PHFetchResult *newFetch in collectionFetches)
{
    for (PHAssetCollection *sub in newFetch)
    {
        [albumArray addObject:sub];
         // Other setup omitted
    }
}
4

2 に答える 2

-1

PHAssetCollection クラスに順序を考慮したプロパティを作成できないか。そうすれば、プロパティに基づいてそれらを表示できます。

非常に単純な例として、クラスに 1 ~ n の数字が含まれている場合、その数字に基づいて、どのクラス/写真を表示するかがわかりますか? (または、そのプロパティに基づいて並べ替え、並べ替え後にループすることができます。)

@Edit 簡単な例:

.h ファイルのクラス PHAssetCollection で、プロパティを宣言します。

@property (retain, nonatomic) NSInteger id;

.m ファイルのクラス PHAssetCollection では、初期化メソッドで彼を埋めることができます。.m ファイルで彼を使用したい場合は、彼を合成する必要があります。もちろん、必要に応じて、いつでもどこでも埋めることができます。彼らは標準のIDを取得し、ユーザーが写真をドラッグすると、新しいIDが設定されると想像できます。

以下に基づいてリストをソートし、compare メソッドを実装して、compare 機能を呼び出すことができます。

//Implement
- (NSComparisonResult)compare:(PHAssetCollection *)otherPhoto{
    return [self.id compare:otherPhoto.id];
}

//Call method
NSMutableArray *sortedArray;
sortedArray = [sub sortedArrayUsingSelector:@selector(compare:)];

それを達成する方法はたくさんあります。もう 1 つの複雑な方法は、バックグラウンドで注文を追跡し、注文が変更されるたびに ID を変更しないことです。ApplicationWillTerminate または ApplicationDidEnterBackground が呼び出されると、写真の順序に基づいて写真の ID を変更します。そうすれば、ID を 1 回変更するだけで済み、パフォーマンスをいくらか節約できます。

于 2015-06-17T19:34:34.583 に答える