属性动画:
通过CABasicAnimation来设置属性动画
通过keyPath属性获取到属性的名字
通过fromValue 和toValue属性设置动画的初始状态和结束状态
当然还有很多这里不多做介绍,关键是,当你添加完成BasicAnimation后,执行完成后动画会回到初始状态,由于最近再看的文章可能比较老,上面介绍是通过重写CAAnimationDelegate中的-animationDidStop:finished:方法,这个方法会监听到动画的结束,在这里可以设置动画的结束效果。当然这种方式存在弊端后面会介绍新的方式来处理。
关键帧动画:
CAKeyframeAnimation是UIKit没有暴露出来的类,跟CABasicAnimation一样是CAPropertyAnimation的子类,但是区别在于它可以根据一连串的随意的值来做动画。
CAKeyframeAnimation有一个Values属性来设置多个动画的值,可以设置动画多个值。
这你可以设置CALayer根据一定的轨迹进行运动,这里的轨迹可以通过UIBezierPath来设置,通过CAKeyframeAnimation的path设置运动轨迹,但是需要注意的是,这里的path需要一个指针,于是你需要传一个CGPath
上面的这是你会发现运动时你的CALayer是不变的,于是我们就需要设置一下rotationMode = kCAAnimationRotateAuto
虚拟属性:
首先虚拟属性是什么,这个问题看了好几遍的文章才看懂,比如:CALayer有一个transform动画,当你通过keyPath对它进行赋值的时候,很多时候会达不到你想要的效果,那怎么办呢,可以通过虚拟属性,如:transform.rotation这是你在通过对应的动画。
用transform.rotation而不是transform做动画的好处如下:
我们可以不通过关键帧一步旋转多于180度的动画。
可以用相对值而不是绝对值旋转(设置byValue而不是toValue)。
可以不用创建CATransform3D,而是使用一个简单的数值来指定角度。
不会和transform.position或者transform.scale冲突(同样是使用关键路径来做独立的动画属性)。
toValue和byValue:
下面说一下toValue和byValue 一个是绝对值一个是相对值,前者是在指定位置上增加,后者是在当前位置上增加。
keyPath:
keyPath是一个关键路径而不是一个键,一个键后面是不能加东西的,但是一个关键路径
动画组:CAAnimationGroup
CAAnimationGroup是CAAnimation的子类,关键在于有一个animations的数组,可以存放多个动画,从而多个动画一起执行。
注意:当你多个使用AnimationGroup的时候,当你在每个动画里面添加duration的时候是没有效果的,只有在AnimationGroup里添加才会有效果。
过渡:??????
�取消动画:
- (void)removeAnimationForKey:(NSString *)key;
- (void)removeAllAnimations;
问题在于停止后图层会变回初始状态,并不是停止在当前状态???