CABasicAnimation 旋转动画

作者: luowanglin | 来源:发表于2016-03-21 22:26 被阅读1896次

使用CABasicAnimation 进行旋转动画时,如果进行断续操作,在启动的瞬间,可能会出现旋转卡顿现象,其问题原因 与 相关方法 调用顺序有关。操作如下:

//旋转动画的实现,其rotaView为自定义UIview对象

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

[rotation setToValue:@(M_PI*2)];

[rotation setDuration:4];

[rotation setRepeatCount:MAXFLOAT];

[rotaView.layer addAnimation:rotation forKey:@"rotation"];

//通过触摸屏幕执行 旋转&&暂停

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

//MARK:rotation animation 通过speed属性判断其运动状态 0 为暂停 1 为旋转

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

//save timeOffSet value 

        CFTimeInterval recoderTimer = rotaView.layer.timeOffset;//提取暂停时间,点击暂停时保存的当前时间

//set up spped

        rotaView.layer.speed = 1; //启动旋转

//reset timeOffSet && beginAnimationTime  恢复清零

        rotaView.layer.beginTime = 0;//beginTime 内部会进行偏移量的计算,真正的开始时间,会是在当前时间的基础上减去 参数值。所以所传的参数,不能是停止动画时记录的时间,而应该是开始动画的当前时间 减去 停止动画时的时间,所获得的 偏移差。

        rotaView.layer.timeOffset = 0;//偏移量清零,第一步的提取操作,就是在这步的基础上,做了保存,以便后续使用

//caculate between time 计算与当前时间的差值,同时赋值给 beginTime

         rotaView.layer.beginTime = [rotaView.layer convertTime:CACurrentMediaTime() fromLayer:nil] - recoderTimer;

}else{

//recoder current time 记录暂停的当前时间,然将speed 属性赋值为0,暂停动画

         rotaView.layer.timeOffset = [rotaView.layer convertTime:CACurrentMediaTime()     fromLayer:nil];

         rotaView.layer.speed = 0;

     } 

}

主要是方法执行顺序,因为会存在时间差

相关文章

  • 动画代码

    图片旋转动画 Swift3.0为视图添加旋转动画_CABasicAnimation

  • 初识CABasicAnimation

    级别:★☆☆☆☆标签:「CABasicAnimation」「基础动画」「阴影」「旋转」「scale」作者: WYW...

  • iOS 核心动画

    //基本动画 实现平移动/旋转/等CABasicAnimation * anima=[CABasicAnimati...

  • CAAnimation属性

    CAAnimation动画 keyPath 对应的属性CABasicAnimation动画根据XYZ旋转根据X轴旋...

  • iOS Core Animation讲解---CABasicAn

    本文目录 一、平移动画 二、缩放动画 三、旋转动画 四、其他CABasicAnimation是 CAPropert...

  • Core Animation2-CABasicAnimation

    本文目录 一、平移动画 二、缩放动画 三、旋转动画 四、其他 CABasicAnimation是CAPropert...

  • iOS Layer基本动画

    一、基本动画 1、旋转 //旋转的时候可以绕着 x,y,z旋转 默认的是z CABasicAnimation *b...

  • CABasicAnimation旋转动画

    CABasicAnimation *animation = [CABasicAnimationanimation...

  • CABasicAnimation 旋转动画

    使用CABasicAnimation 进行旋转动画时,如果进行断续操作,在启动的瞬间,可能会出现旋转卡顿现象,其问...

  • 基于CABasicAnimation一些简单的动画

    利用CABasicAnimation来实现一些缩放,平移,旋转的动画 1.缩放 2.平移 3.旋转 4.动画组,将...

网友评论

    本文标题:CABasicAnimation 旋转动画

    本文链接:https://www.haomeiwen.com/subject/sugklttx.html