博客> 核心动画技巧 学习笔记
核心动画技巧 学习笔记
2019-12-06 10:40 评论:0 阅读:627 IT喃
ios

参考网址: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°。

收藏
0
sina weixin mail 回到顶部