Ver no animar con Autolayout

He estado buscando en torno a SO y he encontrado algunas publicaciones relacionadas, pero ninguna que (todavía) ha resuelto mi problema.

Tengo una configuration de vista en mi guión gráfico, con una restricción conectada a través de un IBOulet. Tras una determinada acción, la vista debe moverse hacia arriba (o hasta su position inicial). Por mi vida, no puedo hacer que funcione correctamente. Antes de autolayout, ejecuté este bit de código:

- (void)animateStarBackground:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context myView:(UIView *)myView xPos:(float)xPos yPos:(float)yPos { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; [UIView setAnimationDelay:0.5]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDelegate:self]; myView.center = CGPointMake(xPos, yPos); [UIView commitAnimations]; 

}

Solía ​​funcionar muy bien, pero de todos modos … todos sabemos que esto ya no funciona en Autolayout. Entonces lo cambié a lo siguiente:

 -(void)animateButton:(UIView *)myView { [UIView animateWithDuration:8.0f animations:^{ _viewConstA.constant = 45.0; [myView layoutIfNeeded]; }]; 

}

Cuando se produce la acción, en lugar de comenzar en su position inicial como se establece en el Storyboard, comienza como una vista de 1×1 píxeles en la esquina superior izquierda y anima hacia abajo en su lugar de descanso final (en lugar de upload 15 píxeles como lo había hecho lo deseé).

Ahora, si elimino el [myView layoutIfNeeded]; porción, la acción posiciona la vista exactamente en el lugar correcto … PERO no anima allí. Está instantáneamente allí cuando aparece la vista.

La primera captura de pantalla es la location inicial. El segundo agarre es lo que se supone que es el lugar de descanso final de las vistas. La tercera es la vista que anima desde el punto y la dirección equivocados.

Pensamientos / comentarios? ¿Qué diablos estoy haciendo mal? Pensé que sería muy fácil … Me falta algo obvio.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Cuando viewDidLoad la siguiente animation basada en viewDidLoad desde viewDidLoad , anima el marco desde CGRectZero hasta la location final. Pero si llamo a esto desde viewDidAppear , funciona como esperaba.

 - (void)animateMovementByConstraint { [UIView animateWithDuration:0.5 animations:^{ self.topLayoutConstraint.constant = 100; [self.view layoutIfNeeded]; }]; } 

(En este ejemplo, topLayoutConstraint es una IBOutlet que IBOutlet en Interface Builder para la restricción vertical superior en el control que quería animar).

Con layout automático, desde que comencé a iniciar mis animaciones en viewDidAppear , no he tenido ningún problema.