周末第二弹, 继续Core Animation的基础内容复习.
Layer对象是Core Animation中的核心概念. layer管理着app中的可视化内容, 并且为你提供了改变这些内容样式的选择. iOS app是自动支持layer的, OS X的开发者们则需要手动去设置是否支持layer(默认是不支持的). 一旦开始支持layer, 那么你就需要理解如何配置和操作app中的各个layer以此来达到你想得到的效果.
App中支持Core Animation
在iOS app中, Core Animation是自动支持的, 并且每一个view都自带一个相对应的layer. 在OS X中, 想要使用Core Animation则需要手动去设置, 步骤如下:
- 添加
QuartzCore
框架. - 想要
NSView
对象支持layer需要做以下几步:-
在nib文件中, 在View Effects inspector中勾选想要支持layer的view.
下图展示了基于尺度的重力设置是如何影响图片的. 如果图片和layer所在的矩形区域不匹配, 所有的选项都缩放图片. 选项间的区别在于图片的原始宽高比有没有改变. 默认情况下, layer的
contentsGravity
属性是被设置成kCAGravityResize
的, 这也是唯一一个不保存图片原始宽高比的一个选项.调整layer的视觉样式和表现
layer对象有自己内置的视觉装饰, 比如边界和背景色, 你可以用来填充layer的内容. 因为这些视觉装饰不需要渲染, 所以在一些情景中可以将layer作为一个独立的实体来使用. 你需要做的就是给属性赋值, 然后layer就会处理必要的绘制, 包括动画. 关于layer其他的视觉装饰, 可以看Layer Style Property Animations.
layer有自己的背景色和边界
一个layer除了其自身上的图片外, 其还可以填充背景色和边框. 背景色在图片的下面, 边框则在图片的上面, 如下图. 如果layer包含子layer, 其也会显示在边框的下面. 因为背景色是显示在图片的下面, 所以背景色会对图片产生一些影响.
给layer设置背景色和边框的示例代码如下:
myLayer.backgroundColor = [NSColor greenColor].CGColor; myLayer.borderColor = [NSColor blackColor].CGColor; myLayer.borderWidth = 3.0;
如果你把layer的背景色设置成了一个不透明的颜色, 那么最好把layer的
opaque
属性值设置成YES
. 这样做是因为当把layer显示到屏幕上时, 可以提高显示效果. 如果layer有一个非0的圆角半径, 那么你也可以不设置opaque
属性.layer支持圆角半径
通过添加圆角半径可以给layer创建一个圆角矩形的效果. 圆角半径是一个视觉装饰, 它可以掩盖layer所处的矩形区域的角, 如下图所示. 因为它涉及到透明掩盖, 所以圆角半径并不会影响显示在layer上的图片, 除非
masksToBounds
属性设置成了YSE
. 然而, 圆角半径总是会影响layer的背景色和边框的绘制.在layer上应用圆角半径的话, 需要指定
cornerRadius
属性的值. 你指定的这个半径的值是以点为单位计量的, 并且会被应用到这个layer的所有4个角上.layer支持内置的阴影
CALayer
类包含了一些属性来设置阴影效果. 阴影效果在一些情景下对你的app也是十分有必要的, 它也属于是视觉装饰. 通过layer, 你可以控制阴影的颜色, 相对于layer上内容的位置, 透明度以及形状.不透明度的值默认是0, 这就是完全看不见阴影效果. 当不透明度的值变为非0时, Core Animation就会开始绘制阴影. 因为默认情况下, 阴影的位置是在layer下面的, 所以在你想看见阴影效果之前, 你需要改变阴影的偏移量. 并且需要牢记的一点是, 偏移量的值是基于layer自身所处的坐标系统内而言的. 并且在iOS和OS X中是不同的, 下图展示了下边缘和右边缘带阴影效果的样子. 在iOS中, 在y轴方向的偏移量需要指定正值; OS X中则是负值.
当给layer添加阴影时, 阴影就是layer内容的一部分, 但实际上它是延伸在layer所处的矩形以外的. 所以, 如果你设置了layer的
masksToBounds
属性, 阴影效果就会从边缘被裁剪掉. 而如果你的layer包含了任何透明的内容, 那么就会导致一种奇怪的效果, 即处在layer下面的阴影部分是可以看见的, 但是延伸在外面的却看不见了. 如果你又想看见阴影, 又想设置masksToBounds
, 你可以使用两个layer而不是一个. 把掩盖加到包含内容的layer上, 然后再把这个layer镶嵌到第二个同样大小并且带有阴影效果的layer里.至于阴影如何应用到layer上, 看一下Shadow Properties.
给layer添加一个自定义的属性
CAAnimation
和CALayer
这两个类支持使用KVC来设置自定义的属性. 你可以通过KVC给layer添加数据, 然后通过特定的键来检索. 关于具体如何设置和获得自定义的属性, 请看Key-Value Coding Compliant Container Classes.
-
网友评论