//定义一个枚举 有bofang,zanting,两种状态.
//zhuangtai为枚举变量,默认zanting;
- (void)startSpin
{//创建动画并转动
zhuangtai=bofang;
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
CGRect frame = [quanquan frame];
quanquan.layer.anchorPoint = CGPointMake(0.5, 0.5);
quanquan.layer.position = CGPointMake(frame.origin.x + 0.5 * frame.size.width, frame.origin.y + 0.5 * frame.size.height);
[CATransaction commit];
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
[CATransaction setValue:[NSNumber numberWithFloat:2.0] forKey:kCATransactionAnimationDuration];
CABasicAnimation *animation;
animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0];
animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
animation.delegate = self;
[quanquan.layer addAnimation:animation forKey:@"rotationAnimation"];
[CATransaction commit];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)finished
{//动画结束后 继续执行
if (finished) {
[self startSpin];
}
}
- (void)pauseLayer:(CALayer*)layer
{//暂停转动
zhuangtai=zanting;
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed= 0.0;
layer.timeOffset= pausedTime;
}
- (void)resumeLayer:(CALayer*)layer
{//继续layer上面的动画
zhuangtai=bofang;
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed= 1.0;
layer.timeOffset= 0.0;
layer.beginTime= 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime= timeSincePause;
}
- (void)stopSpin
{
[self pauseLayer:quanquan.layer];
zhuangtai=zanting;
[controlBtn setImage:[UIImage imageNamed:@"C13_btn_zantingbutton_nomal"] forState:UIControlStateNormal];
// [quanquan.layer removeAllAnimations];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)controlClick:(id)sender {
if (zhuangtai==zanting) {
[controlBtn setImage:[UIImage imageNamed:@"C13_btn_kaishibutton_nomal"] forState:UIControlStateNormal];
if (![quanquan.layer animationForKey:@"rotationAnimation"]) {
[self startSpin];
return;
}
[self resumeLayer:quanquan.layer];
}else{
[controlBtn setImage:[UIImage imageNamed:@"C13_btn_zantingbutton_nomal"] forState:UIControlStateNormal];
[self pauseLayer:quanquan.layer];
}
}
iOS 转圈圈的动画
最新推荐文章于 2020-12-19 18:37:26 发布