iOS系列之动画片

223 阅读2分钟

 UIView和CALayer

CALayer包含在QuartzCore框架中,CALayer主要负责绘制,UIView主要负责交互。

使用CoreAnimation开发动画本质就是将CALayer中的内容转化为位图供硬件操作。

layer操作:

view,layer.cornerRadius = 10;

UIWindow是UIView的子类,其职责就是提供一个区域展示UIView,并且将事件分发给UIView。

常见的Layer有:

CATextLayer:

用来实现文字的灵活布局与渲染

CAShapeLayer:

用来绘制矢量图形的,可以指定线宽和颜色利用CGPath绘制图形路径。

优点:1.渲染速度快,使用了硬件加速的方式绘制图形。

            2.内存使用更高效,不需要view作为载体;

            3.超出涂层边界不会被裁减掉;

CAGradientLayer:

实现多种颜色的平滑渐变效果

CATransformLayer:

3D图形变化

CAScrollLayer:

滚动视图

离屏渲染:

修改layer层参数,如view.layer.cornerRadius = 5;

                                   view.layer.maskToBounds = YES;

当前屏幕渲染:

不需要新建缓冲区,也不需要进行缓冲区的切换,比较高效

通过bezierpath进行裁剪

contentsScale属性用于支持高分辨率屏幕,定义了图层像素尺寸与视图大小的比例,默认为1.

当contentsScale=2表示屏幕上的一个点代表两个像素,这个时候对应的就是Retina屏。

Retina屏幕一个点对应四个像素,scale为2.

一般可以这样设置:

layer.contentsScale = [UIScreen mainScreen].scale;

frame、position、anchorPoint三者的关系:

frame.origin.x = position.x - anchorPoint.x*bounds.size.width;

frame.origin.y = position.y - anchorPoint.x*bounds.size.width;

隐式动画:

默认从一个初始状态线性变化到目标状态。

[UIView animateWithDuration:0.5 animations:^{

view.center = self.view.center;

} completion:^(BOOL finished){

}]

显式动画:

显式的定义完整的动画流程,可以沿着曲线移动。

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transformPath"];

CATransform3D scaleTransform = CATransform3DMakeScale(1.2,1.2,1);//3D缩放

animation.toValue = [NSValue valueWithCATransform3D:scaleTransform];

animation.duration = 0.5;

animation.repeatCount = 1;

[view.layer addAnimation:animation forKey:@"animationScaleKey"];

CGAffineTransform:

CGAffineTransformMakeTranslation(CGFloat x,CGFloat y);

CGAffineTransformMakeScale(CGFloat sx,CGFloat sy);

CGAffineTransformMakeRotation(CGFloat angle);

CGTransform3D:

CGTransform3DMakeTranslation(CGFloat x,CGFloat y,CGFloat z);

CGTransform3DMakeScale(CGFloat sx,CGFloat sy,CGFloat sz);

CGTransform3DMakeRotation(CGFloat angle, CGFloat x,CGFloat y,CGFloat z);

通过修改m24属性控制3D变换的透视效果。

CATransition动画: