iOS 核心动画高级技巧(学习笔记)
2018-07-03 本文已影响13人
管乐_VICTOR
参考自:https://zsisme.gitbooks.io/ios-/content/index.html
在此非常感谢作者本人以及翻译者的知识贡献。
- contents属性
CALayer有一个属性叫contents,这个属性的类型定义为id,意味着它可以是任何类型的对象。
CALayer的contents不能直接赋值CGImage和NSImage类型,他们真正要赋值的是CGImageRef,如果直接UIImage的CGImage属性直接复制的话,就会发现编译错误。因为CGImageRef并不是一个真正的Cocoa对象,而是一个Core Foundation类型。不过你可以通过bridged关键字转换。如果要给图层的寄宿图赋值,你可以用下面的方法:
UIImage *image = [UIImage imageNamed:@"test.png"];
layer.contents = (__bridge id)image.CGImage;
- 类似于view中的contentMode属性,CALayer有个contentsGravity属性
// view
view.contentMode = UIViewContentModeScaleAspectFit;
// CALayer
self.layerView.layer.contentsGravity = kCAGravityResizeAspect;
超过绘制边界的内容或是子视图,在UIView里边有个方法一定很熟悉clipsToBounds,在CALayer里边有个叫maskToBounds。
- contentsRect
这里可以用来图片拼合,几张图片拼成一张大图片来显示,这里作者还分享了一个之前很不错的叫做LayerSprites开源库https://github.com/nicklockwood/LayerSprites
它能够读取Cocos2D格式中的拼合图并在普通的Core Animation层中显示出来。
*contentsCenter属性
这个名字不是跟位置有关,而是一个CGRect,它定义了一个固定的边框和一个图层上可拉伸的区域。改变contentsCenter的值并不会影响到寄宿图的显示,除非这个图层的大小改变了,你才看得到效果。