iOSCABasicAnimation的创建、停止和恢复

#pragma mark - 当前视图被触摸

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    

    

    //1.判断myView.layer上是否添加了动画

    CAAnimation *animation = [myView.layer animationForKey:@"rotationAnimation"];

    if (animation) {

        

        //2.判断是否暂停、恢复

        

        if (myView.layer.speed == 0) {

            //恢复动画

            [self resumeAnimation];

        } else {

            //暂停动画

            [self pauseAnimation];

        }

        

    } else {

        [self rotationAnimation];

    }

}


#pragma mark - 动画效果


//暂停动画

- (void)pauseAnimation {

    

    //0-5

    //开始时间:0

//    myView.layer.beginTime

    //1.取出当前时间,转成动画暂停的时间

    CFTimeInterval pauseTime = [myView.layer convertTime:CACurrentMediaTime() fromLayer:nil];

    

    //2.设置动画的时间偏移量,指定时间偏移量的目的是让动画定格在该时间点的位置

    myView.layer.timeOffset = pauseTime;

    

    //3.将动画的运行速度设置为0 默认的运行速度是1.0

    myView.layer.speed = 0;

    

}


//恢复动画

- (void)resumeAnimation {

    

    //1.将动画的时间偏移量作为暂停的时间点

    CFTimeInterval pauseTime = myView.layer.timeOffset;

    

    //2.计算出开始时间

    CFTimeInterval begin = CACurrentMediaTime() - pauseTime;

    

    [myView.layer setTimeOffset:0];

    [myView.layer setBeginTime:begin];

    

    myView.layer.speed = 1;

}


//CABasicAnimation 实现旋转动画

- (void)rotationAnimation {

    

    //1.创建动画对象

    //默认是按Z轴旋转

    CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    

    //2.设置动画属性

    [basic setToValue:@(2*M_PI)];  //2*M_PI 旋转一周

    [basic setDuration:0.5f];

    

    //动画完成后,是否从CALayer上移除动画对象

//    [basic setRemovedOnCompletion:YES];

    

    //设置重复次数,HUGE_VALF是一个非常大的浮点数

    [basic setRepeatCount:HUGE_VALF];

    

    //动画根据锚点旋转的

    //修改锚点

    [myView.layer setAnchorPoint:CGPointMake(0, 0)];

    

    

    //3.添加动画

    [myView.layer addAnimation:basic forKey:@"rotationAnimation"];

    

}


//CABasicAnimation 实现缩放动画

- (void)scaleAnimation {

    

    //1.创建动画对象

    CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

    

    //2.设置动画的属性

    //fromValue toValue

    

    [basic setFromValue:@1];

    [basic setToValue:@2];

    

    //设置动画的时长

    [basic setDuration:0.6f];

    

    //是否自动恢复原始

//    [basic setAutoreverses:YES];

    

    basic.removedOnCompletion = NO;

    basic.fillMode = kCAFillModeForwards;

    

    //3.将动画添加到CALayer

    [myView.layer addAnimation:basic forKey:nil];

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值