1

我正在使用以下代码使标签中的文本闪烁:

- (void)blinkAnimation:(NSString *)animationID finished:(BOOL)finished target:(UILabel *) target {

   NSString *selectedSpeed = [[NSUserDefaults standardUserDefaults] stringForKey:@"EffectSpeed"];
float speedFloat = (0.50 - [selectedSpeed floatValue]);

   [UIView beginAnimations:animationID context:(__bridge void *)(target)];
   [UIView setAnimationDuration:speedFloat];
   [UIView setAnimationDelegate:self];
   [UIView setAnimationDidStopSelector:@selector(blinkAnimation:finished:target:)];

   if([target alpha] == 1.0f)
       [target setAlpha:0.0f];
  else
       [target setAlpha:1.0f];

   [UIView commitAnimations];
}

我正在使用以下代码制作动画 Stop :

- (void) stopAnimation{

   [self.gameStatus.layer removeAllAnimations];
}

虽然动画效果很好,但我无法阻止它。

能否请你帮忙!

提前致谢....

4

1 回答 1

4

问题是您animationDidStopSelector在手动停止动画时被调用,但该方法只是开始另一个动画。所以你可以停止它,但你会立即启动另一个动画。

就个人而言,我建议摆脱animationDidStopSelector并使用动画的自动反转和重复功能:

[UIView beginAnimations:animationID context:nil];
[UIView setAnimationDuration:speedFloat];
[UIView setAnimationDelegate:self];
[UIView setAnimationRepeatAutoreverses:YES];
[UIView setAnimationRepeatCount:CGFLOAT_MAX];
[target setAlpha:0.0f];
[UIView commitAnimations];

那应该可以解决它,但是正如holex所说,您应该使用块动画。我从文档中引用:“beginAnimations在 iOS 4.0 及更高版本中不鼓励使用此方法 []。您应该使用基于块的动画方法来指定您的动画。”

因此,等效的块动画将是:

[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat
                 animations:^{
                     self.gameStatus.alpha = 0.0;
                 }
                 completion:nil];

无论您使用哪种技术,您removeAllAnimations现在都将按预期工作。

顺便说一句,当您停止动画时,它会alpha立即设置为零。停止重复动画然后将动画alpha从当前值设置为您想要的最终值可能会更优雅。为此,您需要opacity从表示层获取电流,然后将其动画alpha到您希望它停止的任何位置(在我的示例中为 1.0,但您也可以使用 0.0):

CALayer *layer = self.gameStatus.layer.presentationLayer;
CGFloat currentOpacity = layer.opacity;

[self.gameStatus.layer removeAllAnimations];

self.gameStatus.alpha = currentOpacity;
[UIView animateWithDuration:0.25
                 animations:^{
                     self.gameStatus.alpha = 1.0;
                 }];
于 2013-02-16T21:01:43.120 回答