核心动画 - 02 旋转 缩放

首先重复一下核心动画的基本步骤:

1.实例化基本动画
2.添加动画属性
3.将动画添加到图层

直接看旋转的代码吧,简单

    //1.实例化基本动画
    //默认按照Z轴旋转
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    [self.myView.layer setAnchorPoint:CGPointMake(1, 0)];
    //2.设置基本属性
    //旋转一周2pi
    [anim setToValue:@(2 * M_PI)];
    //HUGE_VALF  一个非常大的浮点数值,认为无线循环
    [anim setRepeatCount:HUGE_VALF];
    //动画时长
    [anim setDuration:0.5f];
    //3.将动画添加到图层
    //key可以随意指定 , 判断图层中是否存在该动画
    [self.myView.layer addAnimation:anim forKey:@"rotationAnim"];

注意 :
1.修改animationWithKeyPath 和setAnchorPoint(锚点)动画就会发 生很大的变化。锚点会使他的位置发生变化。
2.HUGE_VALF 一个非常大的浮点数值,认为无线循环。
3.注意添加图层时指定了forKey的值,一会会用到,用来判断当前是否有动画执行,如果有暂停,没有继续。

缩放代码

    //1.实例化基本动画
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    //2.设置基本属性
    //fromValue   toValue
    //从当前大小缩小到一半  然后恢复初始大小
    [anim setFromValue:@(1.0)];
    [anim setToValue:@(0.5)];
    [anim setAutoreverses:YES];
    //动画时长
    [anim setDuration:0.5f];
    //3.将动画添加到图层
    [self.myView.layer addAnimation:anim forKey:nil];

当动画开始后在点击 就暂停

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self scaleAnimation];
    //判断myview是否旋转  如果已经旋转  就停止
    CAAnimation * anim = [self.myView.layer animationForKey:@"rotationAnim"];
    NSLog(@"%@",anim);
    if (anim) {
        //停止动画
        [self.myView.layer removeAllAnimations];

    }else{
        [self rotatopnAnimation];
    }
    
}

这是主要是根据 animationForKey来判断是否有CAAnimation。得到是否正在执行动画。

效果图:

核心动画 - 02 旋转 缩放_第1张图片
setAnchorPoint 为 1—0.5.gif
核心动画 - 02 旋转 缩放_第2张图片
setAnchorPoint 为 0.5—0.5.gif

这两个效果图 是 setAnchorPoint 的值修改 ,来改变相对位置,旁边的log是判断暂停还是开始。

感谢那些让我进步,给我动力的人们,一起加油、一起努力、一起讨论!

你可能感兴趣的:(核心动画 - 02 旋转 缩放)