Core Animation 浅析
(理解有问题的地方,欢迎指出来)
1.层(CALayer)
CALayer是所有界面元素的基类,包括动画。一般情况下我们在绘制界面的时候都是使用的UIView或者UIView的子类,比如我们想添加一张图片用UIImageView,显示一大段文字用UITextField等。UIView的直接父类是:UIResponder,且UIView中有个属性:
@property(nonatomic,readonly,retain) CALayer *layer;// returns view's layer. Will always return a non-nil value. view is layer'sdelegate
1).frame、bounds、position 和 anchorPoint:
4).contentsGravity:
设置contents位置,是个NSString类型而不是枚举,可以居中、靠左,按比例缩放等。
5).contentsScale:
这个属性是用来适应Retina屏的,是图片像素点和坐标点的比例,默认为1.0。如果在Retina屏下显示2倍图,图片会被放大,因为默认一个点显示一个像素点,但是2倍图像素点是普通图的4倍,如果想要显示正常需要在一个点上显示4个像素点才行。
6).contentsRect:
这是一个单位坐标,可以做图片拼合。如果先显示一张大图的左上角1/4在当前layer而不是全图,可以把该值设为(0, 0, 0.5, 0.5)。通过类似方法,可以把一张大图分成无数小图。
7).mask:
类似蒙版,比如有张大图,你不想显示全部,只想显示中间固定大小的一个圆形。比如:圆形头像。可以在方形头像上盖一层圆形的蒙版,效果和masksToBounds一样。
检测哪个Layer被点击,以及某个点是否在该Layer上:
- (CALayer *)hitTest:(CGPoint)p;
- (BOOL)containsPoint:(CGPoint)p;
CALayer子类:
1).CAEmitterLayer:一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。
2).CAGradientLayer:生成两种或更多颜色平滑渐变的
3).CAMetalLayer
4).CAEAGLLayer
5).CAReplicatorLayer:高效生成许多相似的图层,在有很多重复图层时比较有用。
6).CAScrollLayer:实现的效果类似UIScrollView,
7).CAShapeLayer:通过矢量图形而不是bitmap来绘制的图层子类
8).CATextLayer:以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性。
9).CATiledLayer
10).CATransformLayer:更方便的做一些3D变换
2.动画(CAAnimation)
CAPropertyAnimation:该类派生了两个子类:
CABasicAnimation:对动画层的属性变化,提供了简单的动画插值;
CAKeyframeAnimation:帧动画,可以定义行动路线。
CAAnimationGroup:多个动画可同时进行;
CATransition:试图切换的渐变效果(推拉push效果,消退fade效果,揭开reveal效果)。