ios - codigo - UIView animando una restricción afecta a otra restricción
bloquear aplicaciones iphone (1)
He puesto el código de inicio de la animación en viewDidAppear:
lugar de viewWillAppear:
y el problema se ha ido. Insteresting. Intenté iOS 6 e iOS 7 y ambos funcionan bien ahora.
Tengo un UIImageView que quiero animar lentamente con un efecto panorámico en el fondo. Mi vista de la imagen de fondo tiene cuatro restricciones:
- Distancia desde la guía de diseño superior a la superior (cero)
- Distancia desde la guía de diseño inferior a inferior (cero)
- Ancho (constante a 850)
- Líder de espacio para supervisión (cero, conectado al código como salida de
backgroundImageViewLeftMargin
)
El modo de vista de la vista de imagen está configurado en "relleno de aspecto". Cuando ejecuto mi aplicación, no hay problema, se muestra la imagen estática. Agregué el siguiente código para animar mi vista:
-(void)animateBackgroundHorizontally:(BOOL)forward{
self.backgroundImageViewLeftMargin.constant = forward ? -500 : 0;
[self.backgroundImage setNeedsUpdateConstraints];
[UIView animateWithDuration:30 animations:^{
[self.backgroundImage layoutIfNeeded];
} completion:^(BOOL finished) {
[self animateBackgroundHorizontally:!forward];
}];
}
Luego llamo [self animateBackgroundHorizontally:YES];
en viewWillAppear:
Esto es lo que sucede:
La imagen comienza a animarse desde una ubicación inesperada (aunque siempre la misma) (borde superior aproximadamente en el medio de la pantalla donde debería estar en la parte superior de la pantalla), anima a su posición final correctamente y luego cuando vuelve a la animación original ubicación, se anima correctamente . La única propiedad que estoy animando es el margen izquierdo. Cuando no llamo al código de animación, se muestra correctamente. ¿Por qué la animación comienza desde una ubicación incorrecta como se ve en la imagen? Intenté establecer self.backgroundImage.translatesAutoresizingMaskIntoConstraints
tanto en YES
(obtuve la incapacidad de satisfacer simultáneamente el error de constaints ) como en NO
pero no funcionó. Este problema persiste tanto en iOS 6 como en iOS 7.