objective-c ios cocoa-touch animation uiviewanimation

objective c - Animar una vista de imagen para deslizarse hacia arriba



objective-c ios (2)

hazlo intentar

logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height)

Estoy intentando hacer que una vista de imagen ( logo continuación) se desplace hacia arriba en 100 píxeles. Estoy usando este código, pero nada sucede en absoluto:

[UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:3]; logo.center = CGPointMake(logo.center.x, logo.center.y - 100); [UIView commitAnimations];

Este código está en el método viewDidLoad . Específicamente, el logo.center = ... no está funcionando. Otras cosas (como cambiar el alfa) lo hacen. Tal vez no estoy usando el código correcto para deslizarlo hacia arriba?


Para storyboards / NIB no autodesplazados, su código está bien. Por cierto, ahora generalmente se recomienda animar usando bloques :

[UIView animateWithDuration:3.0 animations:^{ self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0); }];

O bien, si desea un poco más de control sobre las opciones y similares, puede usar:

[UIView animateWithDuration:3.0 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{ self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100); } completion:nil];

Pero tu código debería funcionar si no estás usando el autolayout. Es solo que la sintaxis anterior es preferida para iOS 4 y posterior.

Si usa el diseño automático, (a) crea un IBOutlet para su restricción de espacio vertical (ver a continuación), y luego (b) puede hacer algo como:

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; static BOOL logoAlreadyMoved = NO; // or have an instance variable if (!logoAlreadyMoved) { logoAlreadyMoved = YES; // set this first, in case this method is called again self.imageVerticalSpaceConstraint.constant -= 100.0; [UIView animateWithDuration:3.0 animations:^{ [self.view layoutIfNeeded]; }]; } }

Para agregar una IBOutlet para una restricción, simplemente controle -drag desde la restricción a su .h en el editor asistente:

Por cierto, si está animando una restricción, sea sensible a cualquier otra restricción que pueda haber vinculado a esa imagen. A menudo, si colocas algo justo debajo de la imagen, tendrá su restricción vinculada a la imagen, por lo que debes asegurarte de que no tienes ningún otro control con restricciones para tu imagen (a menos que quieras que se muevan también) .

Puede ver si está usando el diseño automático abriendo su storyboard o NIB y luego seleccionando el "inspector de archivos" (la primera pestaña en el panel de la derecha o puede levantarlo presionando la opción + comando + 1 (el número) 1 ")):

Recuerde, si planea respaldar pre-iOS 6, asegúrese de desactivar "autolayout". Autolayout es una función de iOS 6 y no funcionará en versiones anteriores de iOS.