iOS 转圈圈的动画

//定义一个枚举 有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];
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值