翻转UILabel

时间:2013-11-18 10:45:11

标签: ios iphone objective-c core-animation

我想使用CABasicAnimation来翻转UILabel。动画将永远重复,并将在两个不同的值之间更改UILabel的文本。

- (void)animateLabel
{
     [self.myLabel.layer addAdnimation:[self labelAnimation]  forKey:@"flip"];
}

- (CAAnimation*)labelAnimation
{
     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
     [animation setRepeatCount:NSIntegerMax];
     [animation setAutoreverses:YES];
     [animation setDuration:2.0];
     [animation setDelegate:self];
     CATransform3D transform = CATransform3DMakeRotation(M_PI_2, 1, 0, 0);
     [animation  setToValue:[NSValue valueWithCATransform3D:transform]];
     return animation;
}

现在,我尝试使用委托,但委托方法仅在动画首次开始时使用。相反,我需要能够知道标签完成一个周期。是否有一些方便的方法或方法来使用CALayer或我必须使用CADisplay链接或计时器?我想事先感谢你帮助我。

2 个答案:

答案 0 :(得分:2)

要在每个周期收到通知,请将setRepeatsCount设置为1.然后,您将在委托animationDidStop中收到通知:已完成。然后,您将再次添加相同的动画。

 - (void)animateLabel
 {
     [self.myLabel.layer addAdnimation:[self labelAnimation]  forKey:@"flip"];
 }

 - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
    [self animateLabel];
    // do other stuff
}

 - (CAAnimation*)labelAnimation
 {
     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
     [animation setRepeatCount:1];
     [animation setAutoreverses:YES];
     [animation setDuration:2.0];
     [animation setDelegate:self];
      CATransform3D transform = CATransform3DMakeRotation(M_PI_2, 1, 0, 0);
     [animation  setToValue:[NSValue valueWithCATransform3D:transform]];
      return animation;
  }

答案 1 :(得分:0)

不,这是你应该根据the documentation进行的方式。

  

将此属性设置为HUGE_VALF将导致动画永远重复。