我想使用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链接或计时器?我想事先感谢你帮助我。
答案 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
将导致动画永远重复。