Core Animation:拉伸过滤和组透明

2016-02-22  本文已影响133人  黄龙辉

拉伸过滤

当我们使用图层显示图片时,理想情况下就是图片的像素和显示图片区域的像素比例为1:1。但是,许多情况下,图片是需要进行拉伸的。当图片需要显示不同的大小时,有一种叫做拉伸过滤的算法就起到作用了。它作用于原图的像素上并根据需要生成新的像素显示在屏幕上

图层提供了3种拉伸过滤算法。属性magnificationFilterminificationFilter,它们默认都采用kCAFilterLinear算法。

效果展示:

左边采用了kCAFilterLinear,右边采用kCAFilterNearest 左边采用了kCAFilterLinear,右边采用kCAFilterNearest

总结:对于比较小的图或者是差异特别明显,极少斜线的大图,最近过滤算法会保留这种差异明显的特质以呈现更好的结果。但是对于大多数的图尤其是有很多斜线或是曲线轮廓的图片来说,最近过滤算法会导致更差的结果。换句话说,线性过滤保留了形状,最近过滤则保留了像素的差异。

组透明

实现组透明的两种方法:

  1. 在info.plist文件中,设置UIViewGroupOpacity(key为Renders with group opacity)为YES(iOS7及以上的版本默认为YES);
  2. 设置CALayer的一个叫做shouldRasterize属性为YES。在应用透明度之前,图层及其子图层都会被整合成一个整体的图片,这样就没有透明度混合的问题了。默认情况下,所有图层拉伸都是1.0, 所以如果使用了shouldRasterize属性,就要确保设置rasterizationScale属性去匹配屏幕,以防止出现Retina屏幕像素化的问题。
上一篇下一篇

猜你喜欢

热点阅读