zona vehicular transito transitar son restringidas restringida restriccion que pueden puede permiso para microcentro mapa las ingreso horario cuáles calles caba ios objective-c uiscrollview uiimageview autolayout

ios - vehicular - ¿Es posible tener un UIImageView dentro de un UIScrollView acercar y alejar, pero se adhieren al centro con Auto Layout?



restriccion de transito microcentro mapa 2018 (2)

Al usar Autolayout, las llamadas a setFrames no toman efectos, por eso el imageView no está centrado en su scrollView.

Dicho esto, para lograr el efecto central puede elegir entre:

  1. La forma más fácil es establecer traduceAutoresizingMaskIntoConstraints a YES para tu imageView en ViewDidLoad , que traducirá las llamadas a setFrame: a nuevas restricciones basadas en tu imageView autoresizingMask . Pero debes asegurarte de que las nuevas restricciones estén satisfechas con las que configuraste en tu guión gráfico (en tu caso, ninguna).

  2. En su método scrollViewDidZoom: agregue directamente las restricciones para centrar su imageView

-

[self.imageView addConstraint:[NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]]; [self.imageView addConstraint:[NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];

Para resumir, estoy intentando crear una funcionalidad similar a Photos.app.

Tengo un UIScrollView con un UIImageView dentro de él configurado en el Storyboard. El zoom funciona, pero tengo problemas para mantenerlo centrado. En todas las implementaciones de vistas de desplazamiento basadas en mi marco, lo he centrado de la siguiente manera, que funciona muy bien:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { CGRect newImageViewFrame = self.imageView.frame; // Center horizontally if (newImageViewFrame.size.width < CGRectGetWidth(scrollView.bounds)) { newImageViewFrame.origin.x = (CGRectGetWidth(scrollView.bounds) - CGRectGetWidth(self.imageView.frame)) / 2; } else { newImageViewFrame.origin.x = 0; } // Center vertically if (newImageViewFrame.size.height < CGRectGetHeight(scrollView.bounds)) { newImageViewFrame.origin.y = (CGRectGetHeight(scrollView.bounds) - CGRectGetHeight(self.imageView.frame)) / 2; } else { newImageViewFrame.origin.y = 0; } self.imageView.frame = newImageViewFrame; }

Pero con Auto Layout no es para nada.

No tengo restricciones en UIScrollView o UIImageView, ya que no sé lo que deberían ser. Estoy pensando que debería pegar UIScrollView en las cuatro esquinas, pero para UIImageView no estoy del todo seguro, ya que el zoom cambia su fotograma.

Aquí hay un proyecto de ejemplo: http://cl.ly/21371H3q381N

¿Cómo haría para hacer zoom con el trabajo de centrado con diseño automático?


Para centrar los contenidos, puede tomar como referencia este fragmento de código:

// To re-center the image after zooming in and zooming out - (void)centerScrollViewContents { CGSize boundsSize = self.bounds.size; CGRect contentsFrame = self.imageView.frame; if (contentsFrame.size.width < boundsSize.width) { contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f; } else { contentsFrame.origin.x = 0.0f; } if (contentsFrame.size.height < boundsSize.height) { contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f; } else { contentsFrame.origin.y = 0.0f; } self.imageView.frame = contentsFrame; } //for zooming in and zooming out - (void)scrollViewDidZoom:(UIScrollView *)scrollView { if (self.zoomScale > 1.0f) { [self centerScrollViewContents]; } else { self.bouncesZoom = NO; // for zooming out by pinching [self centerScrollViewContents]; } }

De esta manera, puede cambiar la posición de las coordenadas de una imagen después de acercar y alejar la imagen sin AutoLayout. Por favor, avíseme si ayuda. Gracias :)