Mover vistas con restricciones

Tengo un par de vistas en mi controller de vista que se mueven cuando se detecta un golpe hacia arriba y luego hacia abajo cuando se detecta un golpe hacia abajo. Estaba obligando a las vistas a moverse ajustando el origen y usando CGRectOffset. Ahora aplicé restricciones a mis puntos de vista con IB y no estoy seguro de cuál es la mejor manera de mover las vistas para que terminen en la position correcta en el iPhone 5, 6 y 6+.

Actualmente estoy haciendo algo como esto:

[self.view layoutIfNeeded]; self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant +338; [UIView animateWithDuration:5 animations:^{ [self.view layoutIfNeeded]; }]; 

¿Es mejor cambiar las constantes usando relaciones? Entonces, para la restricción anterior, en lugar de utilizar 338, sería mejor hacer esto:

  self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant + (self.panView.frame.size.height/1.680); //self.panView.frame.size.height = 568 //(568/1.680) = 338 

Sí, no hay problema al cambiar las constantes. Lo que está aquí es cuestión de que tiene que establecer su restricción de manera adecuada.

Consideremos un ejemplo.

Tengo una UIView en Storyboard y me gustaría cambiar su ancho. Su ancho desdibujado es 1024 .

Después de alguna animation, me gustaría cambiar su ancho a 900 .

Los siguientes puntos debo seguir para lograr esto:

  1. Seleccione UIView en la que queremos actualizar las restricciones. Aquí necesitamos actualizar el width , por lo que agregaremos restricciones para el ancho.

introduzca la descripción de la imagen aquí

  1. Ahora podemos ver una nueva restricción agregada a UIView .

introduzca la descripción de la imagen aquí

  1. Haz clic en esa restricción. Mostrará las properties de restricción. Aquí ahora queremos disminuir el ancho de 1024 a 900, para que en la propiedad de restricción cambie la propiedad de la relación a less o igual . De manera similar, si necesita boost el ancho a partir del valor pnetworkingeterminado, la relación será mayor que o igual .

introduzca la descripción de la imagen aquí

  1. Ahora cree una variable IBOutlet para NSLayoutConstraint y conéctela con la restricción de ancho superior.

La variable se ve así:

Objetivo C Código:

 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *viewWidthConstraint; 

Código SWIFT:

 @IBOutlet weak var viewWidthConstraint : NSLayoutConstraint! 
  1. Código para cambiar constantemente como lo necesitamos:

Para networkingucir constantemente usamos el siguiente código:

Objetivo C Código:

 // Reduce width of view. [UIView animateWithDuration:0.35f animations:^{ self.viewWidthConstraint.constant = 900; [self.view layoutIfNeeded]; }]; 

Código SWIFT:

 // Reduce width of view. UIView.animateWithDuration(0.35, animations: { () -> Void in self.viewWidthConstraint.constant = 900 self.view.layoutIfNeeded() }) 

Y de manera similar, podemos cambiarlo por defecto:

Objetivo C Código:

 // Change to default width of view. [UIView animateWithDuration:0.35f animations:^{ self.viewWidthConstraint.constant = 1024; [self.view layoutIfNeeded]; }]; 

Código SWIFT:

 // Change to default width of view. UIView.animateWithDuration(0.35, animations: { () -> Void in self.viewWidthConstraint.constant = 1024 self.view.layoutIfNeeded() })