visuales sola reducir quitar pantalla mueve movimiento efectos efecto bateria animaciones activar iphone cocoa-touch core-animation

iphone - sola - Después de la animación, se restablece la posición de visualización



reducir movimiento iphone (6)

Estoy tratando de hacer una vista deslizable de arriba a abajo. Esto no es gran cosa, utilicé CABasicAnimation para esto. El problema es cuando quiero eliminar la vista. Yo uso esta animación

CABasicAnimation *animation; animation = [CABasicAnimation animationWithKeyPath:@"position"]; [animation setDelegate:self]; animation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.view.layer.position.x, 0 - self.view.bounds.size.height / 2)]; animation.fromValue = [NSValue valueWithCGPoint:self.view.layer.position]; animation.autoreverses = NO; animation.repeatCount = 0; animation.duration = 0.25; animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]; [self.view.layer addAnimation:animation forKey:@"moveX"];

Que anima la vista perfectamente. Pero, después de que termina la animación, mi vista aparece nuevamente. Así que agregué esta línea:

[self.view removeFromSuperview];

Lo cual elimina la vista, pero sin animación. Así que decidí agregar el código de eliminación a este delegado:

-(void) animationDidStop:(CAAnimation *) animation finished:(bool) flag

Ahora, la animación funciona, la vista desaparece, pero a veces, puedo ver que la vista aparece y desaparece más rápido, es como después de la animación, aparece la vista, se llama al delegado animationDidStop y la vista desaparece, obviamente esto es horrible . ¿Qué estoy haciendo mal?


Este también me mordió. Desea establecer el indicador eliminadoOnCompletion de la animación en NO. Su valor predeterminado es SÍ, lo que significa que una vez completada la animación, se elimina y la vista vuelve a su estado inicial.


Bueno, de acuerdo con la muestra de Apple "MoveMe", esto ( removedOnCompletion ) debería funcionar, sin embargo, parece que no.

Entonces, agregue estas líneas después de su código:

[self.view.layer addAnimation:animation forKey:@"moveX"]; self.view.layer.position = [animation.toValue CGPointValue];

Esto garantiza que, después de que se ejecute la animación, la capa esté posicionada correctamente.


Puede que quiera establecer estas propiedades. Causan que la presentación sea preservada al final de la animación.

animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;

Luego, el método "animationDidStop:" se puede usar para eliminar la vista al final de la animación:

-(void) animationDidStop:(CAAnimation *) animation finished:(bool) flag { if (animation == [containerView.layer animationForKey:@"moveX"]) { // remove view here, add another view and/or start another transition } }


Tuve este problema al realizar varias animaciones en un grupo de animación. Tuve que establecer un par de propiedades en el grupo de animación en sí, no las animaciones individuales.

CAAnimationGroup *animGroup = [CAAnimationGroup animation]; // MAKE SURE YOU HAVE THESE TWO LINES. animGroup.removedOnCompletion = NO; animGroup.fillMode = kCAFillModeForwards; animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, nil]; animGroup.duration = tAnimationDuration; [tImageView.layer addAnimation:animGroup forKey:nil];


¿Puedes establecer la propiedad oculta de la vista en SÍ?

Creo que sería:

self.view.hidden = YES;

Pero podría ser:

[self.view setHidden:YES];

Resulta que soy bastante cobarde para descubrir la forma correcta de acceder a las propiedades.


Establecer la vista a oculto como sugiere Rob debería hacerlo.

Para las propiedades de las propiedades me quedaría con el estilo ObjC 2.0 como ya tiene en su código.

set.view.hidden = YES;