Базовая анимация animationDidStop с цепочечной анимацией - PullRequest
1 голос
/ 30 августа 2010

У меня есть две анимации в пользовательском UIView, anim1 и anim2. Anim1 устанавливает свой делегат self, и в моем классе есть метод animationDidStop, который вызывает Anim2. Если я хочу, чтобы после завершения Anim2 произошло что-то еще, как мне это сделать? Могу ли я указать метод делегата с другим именем?

UPDATE

Я объявляю две анимации как iVars:

CABasicAnimation *topFlip;
CABasicAnimation *bottomFlip;

Я создаю каждую анимацию и устанавливаю для себя значение delgate, например

- (CABasicAnimation *)bottomCharFlap: (CALayer *)charLayer
{


bottomFlip = [CABasicAnimation animationWithKeyPath:@"transform"]; 

charLayer.transform = CATransform3DMakeRotation(DegreesToRadians(0), 1, 0, 0); //set to end pos before animation

 bottomFlip.toValue      = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(DegreesToRadians(-360), 1, 0, 0)];
 bottomFlip.fromValue    = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(DegreesToRadians(-270), 1, 0, 0)]; 
 bottomFlip.autoreverses = NO; 
 bottomFlip.duration     = 0.5f;
 bottomFlip.repeatCount  = 1;
 bottomFlip.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut];
 bottomFlip.delegate = self;
 bottomFlip.removedOnCompletion = FALSE;



return  bottomFlip;
}

Затем я пытаюсь найти bottomFlip в animationdidStop:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
if (theAnimation == bottomFlip) {
    NSLog(@"Bottom Animation is: %@", bottomFlip);
}
NSLog(@"Animation %@ stopped",theAnimation);


[bottomHalfCharLayerFront addAnimation:[self bottomCharFlap:bottomHalfCharLayerFront] forKey:@"bottomCharAnim"];
bottomHalfCharLayerFront.hidden = NO;
topHalfCharLayerFront.hidden = YES;


//insert the next one???
}

«Анимация остановлена» регистрируется, но больше ничего, т. Е. Она не распознает bottomFlip iVar

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Это похоже на работу:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
//NSLog(@"First Animation stopped");

if (anim ==[topHalfCharLayerFront animationForKey:@"topCharAnim"]) {
    NSLog(@"Top Animation is: %@", anim);
    topHalfCharLayerFront.hidden = YES;
    [bottomHalfCharLayerFront addAnimation:[self bottomCharFlap:bottomHalfCharLayerFront] forKey:@"bottomCharAnim"];
    bottomHalfCharLayerFront.hidden = NO;
}

else if ((anim ==[bottomHalfCharLayerFront animationForKey:@"bottomCharAnim"])) {

    NSLog(@"Bottom Animation is: %@", anim);

}
0 голосов
/ 30 августа 2010

Просто держите ссылку на ваши анимации как ivars и сравните их адреса памяти с адресом, который передается animationDidStop:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
  if (theAnimation == anim1)
  {
    // Spin off anim2
  }
  else
  {
    // anim2 stopped. Make something else occur
  }
}
...