以下内容主要来自:iOS核心动画高级编程
UIView是iOS系统中界面元素的基础,其本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等等,实际上内部都是在访问它所包含的CALayer的相关属性。
注:你可以使用self.view.layer来获取root layer(它是CALayer类,不是subclass)
-
zPosition属性
配置遮挡属性,就是各个layer的显示次序。(比如layer1和layer2都在父视图layer上,layer1.zPostion = 1; layer2.zPostion = 0 layer1就会盖住layer2)
CGFloat zPostion = self.view.layer.zPosition;
self.view.layer.zPosition = 1; -
anchorPoint属性
注:以自身Bounds尺寸来区分,(0.5,0.5)就是所属视图的中心点为支点。
它主要的作用就是用来作为变换的支点(可以围绕这个支点旋转,类似钟表指针)。
左上角、右下角,anchorPoint分为为(0,0), (1, 1),也就是说anchorPoint是在单元坐标空间(同时也是左手坐标系)中定义的,可以得出在白纸的中心点、左下角和右上角的anchorPoint为(0.5,0.5), (0,1), (1,0)。 -
postion属性(anchorPoint默认是(0.5,0.5),所以position默认也是中心点)
position点是相对suerLayer的,anchorPoint点是相对layer的,两者是相对不同的坐标空间的一个重合点。
anchorPoint的默认值为(0.5,0.5),也就是anchorPoint默认在layer的中心点:
position.x = frame.origin.x + anchorPoint.x * bounds.size.width;
position.y = frame.origin.y + anchorPoint.y * bounds.size.height; -
masksToBounds属性
位于layer之下的盖住,相当于裁剪,跟clipsToBounds一样,只是前者作用于layer,后者作用于UIView及其继承类。 -
contents属性(类型为id)
layer.contents = (__bridge id)image.CGImage -
contentsGravity属性(跟UIImageView的contentMode属性类似)
适应视图:
imageView.contentMode = UIViewContentModeScaleAspectFit;
layer.contentGravity = kCAGravityResizeAspect;
常量:(这里常量是String,UIKit那边是枚举)
• kCAGravityCenter
• kCAGravityTop
• kCAGravityBottom
• kCAGravityLeft
• kCAGravityRight
• kCAGravityTopLeft
• kCAGravityTopRight
• kCAGravityBottomLeft
• kCAGravityBottomRight
• kCAGravityResize
• kCAGravityResizeAspect
• kCAGravityResizeAspectFill -
contentsScale属性
注:CGImage没有拉伸概念,设置图层时候拉伸容易丢失像素,可以通过此属性修复
寄宿图的像素尺寸和视图大小的比例,默认情况下为1。
contentsScale设置为1.0,将会以每个点1个像素绘制图片,如果设置为2.0,则会以每个点2个像素绘制图片,这就是我们熟知的Retina屏幕
self.layerView.layer.contentsScale = [UIScreen mainScreen].scale;
通过设置contentsScale,以当前屏幕的方式渲染 -
contentsRect属性
默认的contentsRect是{0, 0, 1, 1}
相关运用:拼合图片(提高内存使用,载入性能,渲染特性等等)
用四个图片的layer设置contentRect,去掉不需要的部分 -
contentsCenter属性
contentsCenter其实是一个CGRect,它定义了一个固定的边框和一个在图层上可拉伸的区域 -
CAShaperLayer和UIBezierPath搭配使用
UIBezierPath 描绘路径
CAShaperLayer 添加UIBezierPath的路径,addSublayer -
CAKeyframeAnimation 和 CABasicAnimation
CAKeyframeAnimation:关键帧动画
根据UIBezierPath逐帧执行
CABasicAnimation:基本动画
animationWithKeyPath的值(根据键值来执行动画方式)
addAnimation:forkey: 这个方法随意起名字
fromValue 开始值
toValue 终了值(絶対値)
byValue 终了值(相对值) -
mask属性(蒙版属性)
此属性定义了父图层的可见区域,不仅局限于静态图!!! -
组透明效果(shouldRasterize rasterizationScale属性)
button2.layer.shouldRasterize = YES;
button2.layer.rasterizationScale = [UIScreen mainScreen].scale; -
CAGradientLayer
用来生成两种或多种颜色平滑渐变,真正好处是使用了硬件加速
colors属性:设置渐变颜色(如果需要多种渐变颜色,只需在数组里面添加)
gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor blueColor].CGColor];
起点位置和终点位置
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1, 1);
locations属性:调整颜色空间,默认是均匀渲染
gradientLayer.locations = @[@0.0, @0.25, @0.5];
网友评论