2015-06-11 11 views
8

Czy istnieje sposób na zachowanie porządku listy, w którym użytkownik zaaranżował wszystkie swoje albumy w aplikacji Zdjęcia? Próbowałem to naprawić przez cały dzień i nie mogę się zorientować, czego mi brakuje, aby zachować zamówienie na wyświetlanie w mojej aplikacji.Photokit zachować kolejność listy albumów użytkownika

Chciałbym zachować zamówienie, ponieważ użytkownik może przestawiać swoje albumy w aplikacji Zdjęcia, więc chcę, aby mój interfejs pasował do kolejności na liście.

Kod używam skonfigurować listę:

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 
    } 
} 

Odpowiedz

2

Przepraszam, ale nie sądzę, że jest to możliwe (mam nadzieję, że w niektórych uaktualnieniach).
W rzeczywistości można używać PHFetchOptions do sortowania kolekcji zasobów, ale PhotoKit obsługuje tylko ograniczony zestaw kluczy dla właściwości predykatu i sortDescriptors (patrz PHFetchOptions), a między nimi nie widzę klucza do kolejności listy użytkownik zaaranżował w aplikacji Zdjęcia.

0

Czy nie można zrobić właściwość w klasie PHAssetCollection, który bierze pod uwagę kolejność? W ten sposób możesz pokazać je na podstawie właściwości.

Bardzo prosty przykład, jeśli klasa zawiera liczbę od 1 do n, na podstawie tego numeru wiesz, która klasa/zdjęcie do pokazania? (Lub posortuj je w oparciu o tę właściwość i możesz po prostu zapętlić ją po sortowaniu .)

@Edit prosty przykład:

w PHAssetCollection klasy w pliku .h deklarujesz własność.

W klasie PHAssetCollection w pliku .m można wypełnić go metodą inicjalizacyjną. Jeśli chcesz go użyć w pliku .m, musisz go zsyntetyzować. Możesz oczywiście zdecydować się wypełnić, jak zawsze i kiedy chcesz, to zależy od Twoich potrzeb. Mogę sobie wyobrazić, że mają standardowy identyfikator, a kiedy użytkownik przeciąga zdjęcie, ustawia na nim nowy identyfikator.

można sortować listy opiera się na następujących, wdrożyć metodę porównania i wywołać funkcję porównania:

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

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

Istnieje wiele sposobów, aby to osiągnąć. Kolejnym bardziej skomplikowanym zadaniem jest śledzenie zamówienia w tle i nie zmienianie identyfikatora za każdym razem, gdy zamówienie zostanie zmienione. Po wywołaniu ApplicationWillTerminate lub ApplicationDidEnterBackground zmieniasz identyfikator zdjęć na podstawie kolejności zdjęć. W ten sposób będziesz musiał zmienić tylko identyfikator jeden raz, a to pozwoli Ci zaoszczędzić trochę wydajności.

+0

Czy masz przykład kodu? – klcjr89

+0

Twój przykładowy kod nie ma sensu dla zadanego przeze mnie pytania. Jeśli używasz aplikacji Zdjęcia w iOS i zmieniasz kolejność albumów, PHFetchResults nie oddadzą Ci prawidłowej kolejności. Ponadto nie można modyfikować PHAssetCollection. – klcjr89

+0

Po prostu podałem kilka wskazówek i próbowałem wytłumaczyć ten pomysł, nie zamierzam go przeliterować dla ciebie .. – Sliver2009

Powiązane problemy