2010-10-16 15 views
8

Básicamente, la aplicación en la que estoy trabajando sería mucho menos dolorosa si los usuarios no tuvieran que desplazarse hasta el final de su cámara para obtener sus fotos más recientes, quiero la más reciente en la parte superior, no lo haría ¿Esto tiene sentido de todos modos? No estoy seguro de por qué Apple lo diseñó de esta manera, o si simplemente no me estoy dando cuenta de algo.UIImagepickercontroller: ¿es posible cambiar el orden de clasificación de las imágenes en el rollo de la cámara?

Gracias

nick

Respuesta

4

No hay manera de personalizar UIImagePickerController de esta manera, pero a partir de iOS 4.0, básicamente se puede construir su propio selector de imágenes de cualquier manera que desee con el AssetsLibrary framework.

+0

que es golpe, simplemente diciendo. gracias hombre. – nickthedude

9

Si no te importa la adición de un paso adicional de seleccionar el rollo de la cámara de una lista de álbumes puede intentar cambiar su sourceType de SavedPhotoAlbums a PhotoLibrary:

imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

Después de seleccionar el álbum deseado, la siguiente foto La vista de selección mostrará las imágenes más recientes en la parte inferior.

+0

¡gracias por esto! el hecho de que parte de lo último no parece estar documentado en ninguna parte, así que me salvaste un montón de tiempo :) – Dima

+0

gracias, nunca presté atención a esto. ¿Esto estaba funcionando antes? Recuerdo que no encontré esto hace 1/2 año. Esa vez, la solución es usar AssetLibrary. Afortunadamente, busqué en Google esta vez y encontré tu consejo. Apreciar/ –

+0

Esta es la forma correcta de manejar el problema. Buen trabajo leyendo los documentos jaja – i2097i

8

Esto me molestó mucho. Estoy tan cerca de implementar mi propio selector de imágenes personalizado usando AssetsLibrary.

Pero mientras tanto, este truco funcionó para mí: estoy mostrando el selector, buscando la vista de desplazamiento en la jerarquía de vista y desplazándola hasta el final, más o menos. Necesita ser animado ya que esto sucede cuando la vista ya está cargada, pero es mejor que el usuario tenga que desplazarse por 5.000 fotos hasta que llegue a las más nuevas.

[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

¿Quién en la Tierra votó en contra de esto? Funciona perfectamente para mi Muchas gracias @ n13! –

+0

esto no funciona para mí – SarpErdag

+0

funciona como una joya! –

0

Puede obtener imágenes, utilizando ALAsset en un Arry, y luego se puede ordenarlos como desee y utilizar en vista de tabla o vistacoleccion para construir su propio álbum de encargo

Cuestiones relacionadas