2010-10-16 5 views
8

Zasadniczo aplikacja, nad którą pracuję, byłaby o wiele mniej uciążliwa, gdyby użytkownicy nie musieli przewijać do samego końca rolki aparatu, aby uzyskać najnowsze zdjęcia, chcę, aby najnowszy był na szczycie, gdyby nie ". Czy to ma sens? Nie wiem, dlaczego jabłko tak to zaprojektowało, lub jeśli ja po prostu nie zdałem sobie sprawy z czegoś.UIImagepickercontroller: czy można zmienić kolejność sortowania obrazów w rolce z aparatu?

Dzięki

nick

Odpowiedz

4

Nie ma sposobu, aby dostosować UIImagePickerController w ten sposób, ale jak iOS 4.0, można w zasadzie zbudować własny próbnik obrazu w dowolny sposób jak przy użyciu AssetsLibrary framework.

+0

to walnięcie, po prostu mówiąc. dzięki. – nickthedude

9

Jeśli nie przeszkadza dodając dodatkowy etap selekcji rolki aparatu z listy albumów można spróbować zmienić sourceType z SavedPhotoAlbums do biblioteki zdjęć:

imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

Po wybraniu albumu, następne zdjęcie widok wyboru pokaże najnowsze obrazy na dole.

+0

dziękuję za to! fakt, że zaczyna się od najnowszego, nie wydaje się być udokumentowany nigdzie, więc zaoszczędziłeś mi sporo czasu :) – Dima

+0

dziękuję, nigdy nie zwróciłem na to uwagi. Czy to działało wcześniej? Pamiętam, że nie znalazłem tego półtora roku temu. Tym razem rozwiązaniem jest użycie AssetLibrary. Na szczęście tym razem ponownie googlowałem i znalazłem twoją wskazówkę. Appreciate/ –

+0

Jest to poprawny sposób na rozwiązanie problemu. Świetna robota czytająca dokumenty haha ​​ – i2097i

8

Bardzo mnie to denerwowało - jestem już blisko implementacji własnego niestandardowego selektora obrazów za pomocą AssetsLibrary.

Ale w międzyczasie ten hack pracował dla mnie - wyświetlam selektor, szukając widoku przewijania w hierarchii widoku i przewijam go do końca, mniej więcej. Musi być animowany, jak to się dzieje, gdy widok jest już załadowany - ale wciąż jest lepszy niż użytkownik, który musi przeglądać 5000 zdjęć, aż dotrą do najnowszych.

[self presentViewController:self.imagePickerController animated:YES completion:^() { 
     // scroll to the end - hack 
     UIView *imagePickerView = imagePickerController.view; 

     UIView *view = [imagePickerView hitTest:CGPointMake(5,5) withEvent:nil]; 
     while (![view isKindOfClass:[UIScrollView class]] && view != nil) { 
     // note: in iOS 5, the hit test view is already the scroll view. I don't want to rely on that though, who knows 
     // what Apple might do with the ImagePickerController view structure. Searching backwards from the hit view 
     // should always work though. 
     //NSLog(@"passing %@", view); 
      view = [view superview]; 
     } 

     if ([view isKindOfClass:[UIScrollView class]]) { 
      //NSLog(@"got a scroller!"); 
      UIScrollView *scrollView = (UIScrollView *) view; 
      // check what it is scrolled to - this is the location of the initial display - very important as the image picker 
      // actually slides under the navigation bar, but if there's only a few images we don't want this to happen. 
      // The initial location is determined by status bar height and nav bar height - just get it from the picker 
      CGPoint contentOffset = scrollView.contentOffset; 
      CGFloat y = MAX(contentOffset.y, [scrollView contentSize].height-scrollView.frame.size.height); 
      CGPoint bottomOffset = CGPointMake(0, y); 
      [scrollView setContentOffset:bottomOffset animated:YES]; 
     } 
}]; 
+1

Kto na Ziemi to zlekceważył? Działa idealnie dla mnie. Dziękuję bardzo @ n13! –

+0

to nie działa dla mnie – SarpErdag

+0

działa jak klejnot! –

0

można uzyskać obrazy, używając ALAsset w Arry, a następnie można posortować je jak chcesz i użyj w widoku tabeli lub CollectionView zbudować swój własny album