
CALayer 另外两个属性 borderWidth 和 borderColor。二者共同定义了图层边的绘制样式。这条线(也被称为stroke)沿着图层的bounds绘制。同时也包含图层的角
borderColor 是以点为单位的定义边框粗细的浮点数,默认 0
borderColor 定义了边框颜色,默认黑色。是CGColorRef 类型。
shadowOpacity 给任意大于默认值 0 的值,阴影就可以显示在 任意图层之下。值范围 0.0( 不可见) 和 1.0 (完全不透明) 之间
如果想改动阴影,可以使用 shadowColor、shadowOffset、shadowRadius
shadowColor 控制着阴影颜色, CGColorRef 类型、默认黑色
shadowOffset 控制着阴影的放心和距离。它是一个 CGSize 值,宽度控制着 阴影横向的位移,高度控制着纵向的位移。 默认和 {0, -3} 即阴影相当于Y轴有3个点向上位移
shadowRadius 控制着阴影的模糊度。 为 0 时, 阴影和视图一样有个非常明确的边界线。当值越来越大时,边界线就越来越模糊和自然。阴影越模糊,图层的深度看上去就会更明显
图层的阴影继承自内容的外形,而不是根据边界和角半径来确定。为了计算阴影的形状,Core Animation 会将寄宿图(包括子视图)考虑在内,然后通过这些来完美搭配图层形状从而创建一个阴影
shadowPath 属性
计算阴影很消耗资源,尤其是有多个子视图,每个图层还有一个透明效果的寄宿图的时候。如果事先知道阴影形状,可以通过制定shadowPath 来提高性能。
shadowPath 是一个 CGPathRef 类型 (一个指向CGPath的指针)。CGPath 是一个 Core Graphics 对象,用来指定任意的一个矢量图形。
CALayer 有个属性 mask。 本身是个CALayer 类型,有和其他图层一样绘制和布局属性。类似于一个子图层,相对于父图层布局。 mask 定义了父图层的部分可见区域。
只有在mask图层里的内容才是他关心的内容,其他一切都会被隐藏起来
CALayer 提供了三种拉伸过滤方法:kCAFilterLinear、kCAFilterNearest、kCAFilterTrilinear
minification(缩小图片)和magnification(放大图片)默认的过滤器都是 kCAFilterLinear
对于没有斜线的小图来说,最近过滤算法要好很多,对于大图来说,双线性滤波和三线性滤波表现的更出色。
线性滤波保留了形状,最近过滤保留了像素的差异
UIView 有个alpha属性来确定视图的透明度。CALayer 有个等同的属性叫 opacity,这两个属性都是影响子层级的。
如果希望设置一个图层的透明度后,希望它包含的整个图层树像一个整体一样的透明:
1.可以通过设置Info.plist 文件中的 UIViewGroupOpacity 为 yes。但是这个会影响整个app
2.设置CALayer的一个叫 shouldRasterize属性来实现组透明效果。设置为yes,在应用透明钱,图层及其子图层都会被整合成一个整体的图片,这样就么有透明度混合的问题了。
为了启动 shouldRasterize属性,我们设置了图层的 rasterizationScale 属性,默认情况下,所有图层的拉伸都是1.0,所以如果你使用了 shouldRasterize 属性,你就要确保你设置了rasterizationScale属性去匹配屏幕,以防止出险Retina屏幕像素化问题。
1 ViewOverlay是view内容绘制完成之后,最后绘制的一层,可以理解为一层透明的遮盖层2 ViewGroupOverlay是viewGroup所有的child绘制完成之后,最后绘制的一层透明的遮盖层
ViewOverlay可以添加Drawable,可以给view添加各种装饰
ViewGroupOverlay处理可以添加Drawable,还可以添加View,如果添加的view有父view,那么view会从原来的父view中移除,添加的View不处理任何事件。添加的View如果不是原来界面就有的View,需要自己Layout,不然不会显示,可以参考第二篇文章。
相关文章: https://blog.csdn.net/jxq1994/article/details/80158881
https://blog.csdn.net/aerfahaidao/article/details/86496314
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)