Animar / Mover vistas bajo el uso de Autolayout

Quiero mover una vista de una posición a otra, puedo implementarla usando

self.view.center = CGPointMake(100, 200); 

sin embargo, si el proyecto usa Autolayout, la vista volverá a la posición original después de ejecutar:

 [self.view.superview setNeedsLayout]; 

entonces, ¿cómo mover una vista a una nueva posición?

Debe cambiar las restricciones si está utilizando autoLayout. La forma en que se sugiere es hacer una salida en su controlador de vista de la restricción, luego cambia la constante de la restricción. Si tiene tiempo, definitivamente recomendaría ir aquí y ver “Diseño automático por ejemplo” o “Mejores prácticas para dominar el diseño automático”. Me ayudaron mucho. Supongo que lo importante es que con autoLayout, ya no piensas en términos de marcos. Configurar el centro simplemente no funciona con el diseño automático. Se trata de cómo las vistas se relacionan entre sí.

Con AutoLayout habilitado, debemos FORGET FRAMES y solo CONSIDER CONSTRAINTS RESTRICCIONES. Sí, para la animación tampoco puede cambiar el marco o el centro, las vistas volverán a su posición original cuando se llame al diseño.

En su lugar, debería consider changing the constant value of the constraint para obtener el mismo efecto.

Considere una interfaz de usuario como la imagen que figura a continuación. Tengo una vista de imagen con un 20 points leading space from it's superview que significa que tiene una restricción de espacio horizontal con su supervista. También tengo tres restricciones más asociadas a esa vista de imagen, arriba, anchura y altura.

Le mostraré cómo podemos animar la imagen de izquierda a derecha como se muestra en la imagen.

Crea IBOutlet’s para la restricción que necesitamos para animar. Aquí tomamos solo restricciones de espacio horizontal, eso es suficiente para mover esta vista de izquierda a derecha.

 @property (weak, nonatomic) IBOutlet UIImageView *imageView; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalSpaceConstraint; 

enter image description here

Acción Go Away , necesitamos actualizar el valor constante de esta restricción.

 - (IBAction)moveFrontAction:(id)sender { self.horizontalSpaceConstraint.constant = 220; [UIView animateWithDuration:0.5 animations:^{ [self.imageView layoutIfNeeded]; }]; } 

Ahora la vista debe moverse hacia el extremo derecho. Solo estoy haciendo eso dentro de un bloque de animación, así podremos ver una buena animación de izquierda a derecha y viceversa. En producción, no deberíamos codificar los valores como esto. Solo lo hago aquí para aclarar el concepto.

enter image description here

Dentro de la acción Come Back , nuevamente estamos restableciendo la constante a su valor original, para que pueda ver la imagen naranja que se anima a la ubicación original.

 - (IBAction)moveBackAction:(id)sender { self.horizontalSpaceConstraint.constant = 20; [UIView animateWithDuration:0.5 animations:^{ [self.imageView layoutIfNeeded]; }]; }