图层属性的渲染顺序
在渲染处理期间,Core Animaiton持有图层的不同属性,并按顺序渲染这些属性。该顺序决定了图层最终的呈现。
几何属性
一个图层的几何属性指定它相对于它的父图层被显示的方式。几何属性页指定了图层圆角的半径以及应用到图层和它的子层的变换。图A-1显示了示例图层的边界矩形。
下面列出的CALayer属性制定了一个图层的几何结构:
- bounds
- position
- frame(根据bounds和position计算得出,该属性是不是一个可动画属性)
- anchorPoint
- cornerRadius
- transform
- zPosition
注意:cornerRadius属性仅在iOS 3.0及以上被支持。
背景属性
Core Animation首先会渲染图层的背景。你可以为背景指定一个颜色。在OS X中,你也可以指定一个应用到背景内容的Core Image过滤器。图A-2显示了2个示例图层的版本。在左边的图层设置了backgroundColor属性,而右边的没有设置背景颜色。但有一个边框和一个应用在图层backgroundFilters属性上的挤压变形滤镜。
背景滤镜被应用到位于图层背后的内容上。该内容主要是由父图层的内容组成。你可能使用一个背景滤镜让前景图层内容突出;比如说,通过应用一个模糊滤镜。
下面的CALayer属性会影响图层的背景显示:
backgroundColor
backgroundFilters(iOS不支持此属性)
注意:在iOS中,backgroundFilters属性在CALayer类中是被暴露的,但复制到该属性的滤镜是被忽略的。
图层内容
如果图层有任何的内容,该内容将被渲染在背景颜色的上面。你可以通过直接设置一副位图提供图层内容,或使用一个代理指定内容,或是子类化图层并直接绘制内容。并且你可以使用许多不同的绘图技术(包括Quartz、OpernGL、Quartz合成器)提供内容。图A-3显示了一个示例图层,它的内容是通过直接设置一副位图。位图内容由一个右下角是一个机器人图标的大透明空间构成。
带有圆角半径的图层不会自动裁剪它们的内容;然而,设置图层的masksToBounds属性为YES将引起图层裁减掉圆角以外的内容。
下面的CALayer属性影响一个图层的内容的显示:
- contents
- contentsGravity
- masksToBounds
子图层的内容
图层可能包含一个或更多的孩子图层,孩子图层被称为子图层(sublayer)。子图层被递归地渲染并相对于父图层的边界矩形进行定位。另外,Core Animation应用父图层的sublayerTransform给每一个子图层,sublayerTransform相对于父图层的锚点。你可以使用子图层变换应用透视,应用于所有图层的其他效果也是一样的。图A-4显示了一个含有2个子图层的示例图层。左边的版本包含了背景颜色,右边的版本没有背景颜色。
设置图层的masktSToBounds属性为YES将引起超出图层边界的任何子图层被裁减掉。
下面的CALayer属性将影响一个图层的子图层的显示:
- sublayers
- masksToBounds
- sublayerTransform
边框属性
一个图层可以使用一个指定的颜色和宽显示一个可选的边框。边框按照图层的边界矩形,并会将圆角半径值考虑进去。图A-5显示了一个添加了边框的示例图层。
下面的CALayer属性将影响图层边框的显示
- borderColor
- borderWidth
平台注意点:borderColor和borderWidth属性仅在iOS 3.0及以上得到支持
滤镜属性
在OS X平台,或许你可能为图层内容应用滤镜效果。使用自定义的合成滤镜指定图层的内容与它的底部图层内容的混合方法。图A-6显示了一个应用了Core Image的分色器滤镜图层。
下面的CALayer属性指定一个图层内容的滤镜:
- filters
- compositingFilter
平台注意点:在iOS中,图层忽略任何你赋值给他的滤镜值
阴影属性
图层可以显示阴影效果,并且可以配置阴影的形状、透明度、偏移、模糊半径。如果你不指定一个自定义的阴影形状,阴影是在图层的部分基础上,阴影并不是完全透明的。图A-7显示了相同图层应用红色阴影的多种不同版本的结果。
左边和中间的版本包含一个背景颜色,所以阴影仅是显示在图层边框的周围。然而,右边的版本不包括背景颜色,在这种情况下,阴影将应用于图层的内容、边框以及子图层。
下面的CALayer属性影响图层阴影的显示:
- shadowColor
- shadowOffset
- shadowOpacity
- shadowRadius
- shaodwPath
平台注意点:shadowColor、shadowOffest、shadowOpacity和shadowRedius属性在iOS3.2+中才得到支持。shadowPath属性在iOS3.2及以上得到支持,OS X中10.7及以上得以支持。
不透明度属性
一个图层的不透明度属性决定了多少背景内容透过图层被显示。图A-8显示了一个示例图层,它的不透明度被设置为0.5。这将允许部分背景图片穿透显示出来。
下面的CALyaer属性指定图层的不透明度:
- opacity
蒙版属性
你可以使用一个蒙版遮蔽所有或部分图层内容。蒙版本身是一个图层对象,它的alpha通道被用于决定被遮蔽的内容和被透射的内容。蒙版图层内容的不透明区域允许下方的图层内容穿透显示 而透明区域部分或完全地遮蔽了下方的内容(类似于PS里面的蒙版白的为显示区域,黑的为隐藏区域)。图A-9显示了由一个蒙版图层和两个不同的背景合成的示例图层。左边的版本,图层的透明度设置为1.0。右边的版本,涂层的透明度为0.5,导致穿透图层蒙版部分的背景内容数量减少。
下面的CALayer属性用于指定一个图层的蒙版
- mask
平台注意:蒙版属性在iOS3.0及以上版本得以支持