Estoy usando CABasicAnimation para rotar UIImageView y no puedo reanudar la animación en pausa. La animación se inicia en el método viewDidLoad:¿Cómo funciona la solución para detener/reanudar CABasicAnimation?
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]];
self.myImage = img;
[self.view addSubview:img];
[img release];
CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
fullRotation.duration = 10;
fullRotation.repeatCount = LARGE_VAL;
[img.layer addAnimation:fullRotation forKey:@"360"];
Necesito tener sin parar la animación repetible que se reanuda cuando la vista aparece en la pantalla. Así que he leído esta publicación (here) y he implementado la solución provista my apple (solution) para detener y reanudar la animación de la capa. Por lo tanto, he utilizado estos métodos:
-(void)pauseLayer:(CALayer*)layer{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeLayer:(CALayer*)layer{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
Y he añadido estos métodos a viewWillAppear y viewWillDisappear utilizando y pasar la capa de la propiedad myImage:
-(void)viewWillDisappear:(BOOL)animated{
[self pauseLayer:self.myImage.layer];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self resumeLayer:self.myImage.layer];
}
la imagen no rotación inicial cuando la vista va en la pantalla. Pero luego pongo un UIViewController en la pantalla y luego vuelvo a la vista con la rotación de la imagen. El problema es que la rotación de la imagen no se reanuda cuando la vista aparece en la pantalla. Lo he comprobado: mi imagen La propiedad UIImageView no es nula, se invocan los métodos viewWillDisappear y viewWillAppear. Pero la animación no se está reanudando. ¿He hecho algo mal o me he perdido algo?
He comprobado la dirección física de mi vista de la imagen propiedad de objeto (tanto en la vista y su capa) y las direcciones son los mismos cuando se entra viewWillAppear y viewWillDisappear. El objeto de imagen no es versión, porque he comprobado que no es nulo – Centurion
La propiedad myImage tiene atributos no automáticos y de retención. Por lo tanto, el objeto de imagen se conserva después de la asignación inicial self.myImage = img. – Centurion
en movimiento [addSubview self.view: self.myImage] a la parte inferior, no resuelve el problema, animación todavía no se reanuda después de regresar. – Centurion