animationDidStop:完成:委托方法没有被调用

Posted

技术标签:

【中文标题】animationDidStop:完成:委托方法没有被调用【英文标题】:animationDidStop: finished: delegate method not getting called 【发布时间】:2014-09-02 15:31:19 【问题描述】:

我想在前一个动画例程完成后立即开始一个新的动画例程。但是,当前一个完成时,由于没有调用委托方法,因此不会触发新的。我已经委托了一个视图控制器来处理按钮的 CALayer 的动画。 'buttonSlide' 是前一个动画,而 'buttonFade' 是新动画。 这是代码sn-p:-

-(void)viewWillAppear:(BOOL)animated

NSLog(@"TimeView appearing...");
[super viewWillAppear:animated];
[self pressButton:nil]; // Shows current time as soon as TimeView appears

//    Silver challenge
CABasicAnimation *buttonSlide= [CABasicAnimation animationWithKeyPath:@"position"];
[buttonSlide setFromValue:[NSValue valueWithCGPoint:CGPointMake(320, 191+15)]];
[buttonSlide setToValue:[NSValue valueWithCGPoint:CGPointMake(160, 191+15)]];
[buttonSlide setDuration:.12];

[button.layer addAnimation:buttonSlide forKey:@"buttonSlide"];

[buttonSlide setDelegate:self];

CABasicAnimation *buttonFade= [CABasicAnimation animationWithKeyPath:@"opacity"];
[buttonFade setFromValue:[NSNumber numberWithFloat:.2]];
[buttonFade setToValue:[NSNumber numberWithFloat:1]];
[buttonFade setDuration:10];




-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
  NSLog(@"%@ finshed: %d",anim,flag);
  CAAnimation *buttonFade= [button.layer animationForKey:@"opacity"];
  [button.layer addAnimation:buttonFade forKey:@"buttonFade"];


委托方法没有登录到控制台,因为它甚至没有被调用..请协助。

【问题讨论】:

【参考方案1】:

把这个:

[buttonSlide setDelegate:self];

之前:

[button.layer addAnimation:buttonSlide forKey:@"buttonSlide"];

这样就变成了:

[buttonSlide setDelegate:self];
[button.layer addAnimation:buttonSlide forKey:@"buttonSlide"];

会工作的。

希望这会有所帮助。

【讨论】:

以上是关于animationDidStop:完成:委托方法没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

CABasicAnimation - 未调用 animationDidStop

AnimationDidStop 没有被调用

animationDidStop:finished: 未调用

立即调用 animationDidStop 方法

CAAnimationGroup 中的 CAAnimation 委托

在 CABasicAnimation 中闪烁以进行旋转