参考网址:https://zsisme.gitbooks.io/ios-/content/chapter14/image-ioi.html
zPosition可以改变图层的顺序,但是不能改变事件传递顺序;
子view超出父view的bounds响应点击;
- (void)layoutSublayersOfLayer:(CALayer *)layer;
当图层的bounds发生改变,或者图层的 -setNeedsLayout 方法被调用的时候,这个函数会被执行。这使得你可以手动摆放或者重新调整子图层的大小,但是不能像UIView 的autoresizingMask 和 constraints 属性做到自适应屏幕旋转。
如果子视图或寄宿图的超过了父视图的边界,边框还是会围着父视图的边界画出来的。
如果使用阴影,而超过了父视图的边界,阴影的效果也会直接被取消掉;
阴影其实很消耗资源,特别是有很多个子视图的时候;阴影可以设置成方的,圆的,或者你想要的其他形状;
CALayer有个mask属性,可以截取下面图层背景,上面图层颜色或图片。这个属性可以使动态生成想要的图形和图画;
CALayer蒙版图真正厉害的地方在于,蒙版图不限于静态图,意味着可以通过代码或者动画实时生成; 最近过滤算法;
view.layer.magnificationFilter = kCAFilterNearest;
设置了 magnificationFilter 属性会使模糊的图片变得清晰;
UIView有个alpha属性来确定视图的透明度,CALayer也有一个类似的属性叫opacity,这两个属性都是影响子层级的,就是如果一个图层设置了opacity属性,那么它的子层级都会受此影响。
// 旋转
CGAffineTransformRotate(<#CGAffineTransform t#>, <#CGFloat angle#>);
// 缩小
CGAffineTransformScale(<#CGAffineTransform t#>, <#CGFloat sx#>, <#CGFloat sy#>)
// 移动像素点 如果这句在后面的话,会受上面两句的影响
CGAffineTransformTranslate(<#CGAffineTransform t#>, <#CGFloat tx#>, <#CGFloat ty#>)
// 混合两个已经存在的矩阵
CGAffineTransformConcat(<#CGAffineTransform t1#>, <#CGAffineTransform t2#>)
// 3D变换
CATransform3DMakeRotation(<#CGFloat angle#>, <#CGFloat x#>, <#CGFloat y#>, <#CGFloat z#>)
CATransform3DMakeScale(<#CGFloat sx#>, <#CGFloat sy#>, <#CGFloat sz#>)
CATransform3DMakeTranslation(<#CGFloat tx#>, <#CGFloat ty#>, <#CGFloat tz#>)
我们可以使用m34元素来做透视
固体对象,我们可以用Interface Builder来构建立方体的面,当然也可以用代码来写。可以在每个面上定义视图和控件等用户界面元素;
CAShapeLayer
CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类。你指定诸如颜色和线宽等属性,用CGPath来定义要绘制的图形,最后CAShapeLayer就自动渲染出来了。当然,你也可以用Core Graphics直接向原始的CALayer的内容中绘制一个路径,相比之下,使用CAShapeLayer有以下一些优点:
① 渲染快速。CAShapeLayer使用了硬件加速,绘制同一图形会比用Core Graphics快很多。
② 高效使用内存。一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用过多的内存。
③ 不会被图形边界剪裁掉。一个CAShapeLayer可以在边界之外绘制。你的图层不会像在使用Core Graphics的普通CALayer一样被裁减掉。
④ 不会出现像素化。当你给CAShapeLayer做3D变换时,它不像一个有寄宿图的普通图层一样变得像素化。 CAShapeLayer的圆角可以单独指定一个角。
CATextLayer
CATextLayer 要比UILabel渲染得快得多。很少有人知道在iOS6及之前的版本,UILabel其实是通过WebKit来实现绘制的,这样就造成了当有很多文字的时候就会有极大的性能压力。
而 CATextLayer 使用了 Core text ,并且渲染得非常快。
CATextLayer 的 string 属性并不是你想象的 NSString 类型,而是 id 类型。 这样,你既可以用 NSString 也可以用 NSAttributedString 来制定文本了(注意, NSAttributedString 并不是 NSString 的子类)。
如果被像素化了就要使用contentsScale属性来修改一下,就OK了。
CAReplicatorLayer 重复图层,可以用来做同一图片的轮状排列,也可以用来做反射,反射就相当于是重复次数是2,然后角度刚好是180°。