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动画: