iOS之shouldRasterize属性实现组透明效果
2017-01-12 本文已影响196人
划满伤痕的天空
这里摘抄了一些知识,能够帮助我们更好地了解组透明效果:
理想状况下,当你设置了一个图层的透明度,你希望它包含的整个图层树像一个整体一样的透明效果。你可以通过设置Info.plist文件中的UIViewGroupOpacity为YES来达到这个效果,但是这个设置会影响到这个应用,整个app可能会受到不良影响。如果UIViewGroupOpacity并未设置,iOS 6和以前的版本会默认为NO(也许以后的版本会有一些改变),之后版本都为YES
另一个方法就是,你可以设置CALayer的一个叫做shouldRasterize属性来实现组透明的效果,如果它被设置为YES,在应用透明度之前,图层及其子图层都会被整合成一个整体的图片,这样就没有透明度混合的问题了。(当然,iOS6之后默认都会自动实现组透明,所以你如果想看到不设置的效果,就需要关闭它,下面会详细介绍)
为了启用shouldRasterize属性,我们设置了图层的rasterizationScale属性。默认情况下,所有图层拉伸都是1.0, 所以如果你使用了shouldRasterize属性,你就要确保你设置了rasterizationScale属性去匹配屏幕,以防止出现Retina屏幕像素化的问题。
如何关闭 UIViewGroupOpacity
info.plist里面并没有这个字段,打开info.plist,添加 UIViewGroupOpacity 字段后会自动转化为Renders with group opacity 字段,这是一个BOOL属性,设置为NO就可以了,如下图