Pregunta

Estoy desarrollando un visor de imágenes, al igual que la aplicación Fotos.

Es un UIScrollView con paginación habilitada con imágenes cargadas desde internet, así que me he adaptado porciones de la LazyTableImages muestra . El desplazamiento Ver y cada uno dentro de ImageView que tienen toda su autoresize banderas máscara conjunto.

Cuando observé primero cómo cambia el tamaño estaban sucediendo durante la rotación, se veía bien, pero una vez que empecé a tratar de interactuar con la vista de desplazamiento, me di cuenta de que yo también tenía que cambiar mediante programación el tamaño de la contentView. Hice que al implementar didRotateFromInterfaceOrientation: en mi controlador de vista.

[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)];

Con la interacción comportarse adecuadamente, que luego descubrió que, si yo estaba viendo la segunda foto y gira, partes tanto de la 1ª y 2ª fotos se muestran en la pantalla. Necesitaba cambiar el contentOffset también.

he tratado de solucionar este problema de dos maneras - tanto por el uso de la scrollRectToVisible: animada: Forma de UIScrollView, así como tratar de establecer directamente la propiedad contentOffset. Y yo he experimentado al poner este código en implementaciones tanto de la de "una etapa" y las respuestas de "dos etapas" a los cambios de orientación. Por ejemplo:

-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES];

En todos los casos, sin embargo, que sólo se ve janky como el demonio. De cualquier veo claramente el pergamino suceda, o simplemente saltos. Uuuuuuuuuuugly! ¿Hay una manera de hacer esto para que se comporta exactamente igual que las fotos aplicación hace?

¿Fue útil?

Solución

Lo que terminé haciendo lugar - justo antes de que comience la rotación, ocultar el UIScrollView y crear un UIImageView que contiene la imagen que se está viendo. Rotar, la imagen girará todo bien y bonito, y cuando finalice la rotación eliminan el ImageView y mostrar el Rollo Ver.

Actualizar -. Si estás leyendo esto hoy (en cualquier momento después de IOS 6), utilice un transitionStyle UIPageViewController y listo para UIPageViewControllerTransitionStyleScroll, por crissakes

Otros consejos

hice algo ligeramente diferente cuando se enfrentan con el mismo problema. En willRotateToInterfaceOrientation:duration:, escondo todos subvistas del UIScrollView a excepción de la subvista muestra en ese momento, y en didRotateFromInterfaceOrientation: que mostrar la subvistas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top