iOS中阴影、图层蒙板

2020-07-08  本文已影响0人  浪呀么浪打浪

阴影剪裁

和图层边框不同,图层的阴影继承自内容的外形,而不是根据边界和角半径来确定。为了计算出阴影的形状,coreanimation会将寄宿图(包括子视图)考虑在内,然后通过这些来完美搭配图层形状从而创建一个阴影。

当阴影和剪裁一起操作的时候:阴影通常就是在Layer的边界之外,如果有masksToBounds属性,所有从图层突出出来的内容都会背剪掉。masksToBounds剪掉了阴影和内容。

需要用到两个图层:一个只画阴影的空的外图层,和一个用masksToBounds剪裁内容的内图层。

shadowPath属性

用shadowPath指定任意阴影形状,CGPathAddRect:矩形阴影形状,CGPathAddEllipseInRect:椭圆形阴影。

图层蒙板

CALayer有一个属性叫做mask,可以以编码的方式动态的生成蒙板,也能让子图层或子视图裁剪成同样的形状。

拉伸过滤

minificationFilter和magnificationFilter属性。总的来讲,当我们视图显示一个图片的时候,都应该正确地显示这个图片(意即:以正确的比例和正确的1:1像素显示在屏幕上)。原因如下:

1、能够显示最好的画质,像素即没有被压缩也没有被拉伸。

2、能更好的使用内存,因为这就是所有你要存储的东西。

3、最好的性能表现,cpu不需要为此额外的计算。

不过有时候,显示一个非真实大小的图片确实是我们需要的效果。当图片需要显示不同的大小的时候,有一种叫做拉伸过滤的算法就起到作用了。它作用于原图的像素上并根据需要生成新的像素显示在屏幕上。

CALayer提供了三种拉伸过滤方法,分别是kCAFilterLinear、kCAFilterNearest、kCAFilterTrilinear。

透明度

UIView有一个叫做alpha的属性来确定视图的透明度。CALayer有一个等同的属性叫做opacity,这两个属性都是影响子层级的。也就是说,如果你给一个图层设置了opacity属性,那它的子图层都会受影响。

当显示一个50%透明度的图层时,图层的每个像素都会一半显示自己的颜色,一半显示图层下面的颜色。

CALayer的一个shouldRasterize属性来实现组透明的效果,如果它被设置为yes,在应用透明之前,图层及其子图层都会被整合成一个整体的图片,这样就没有透明度混合的问题了。

上一篇下一篇

猜你喜欢

热点阅读