001 阴影
阴影的形状是继承layer形状,其实在计算阴影的时候很耗费资源,尤其是很多图层的时候,每个图层还有一个透明效果的寄宿图.可以在事先知道图层的形状的情况下提前计算出阴影就可以提高性能.
//一个矩形阴影
CGMutablePathRef squarePath = CGPathCreateMutable();
CGPathAddRect(squarePath, NULL, self.layerView.bounds);
self.layerView.layer.shadowPath = squarePath;
CGPathRelease(squarePath);
//一个圆形阴影
CGMutablePathRef circlePath = CGPathCreateMutable();
CGPathAddEllipseInRect(circlePath, NULL, self.layerView1.bounds);
self.layerView1.layer.shadowPath = circlePath;
CGPathRelease(circlePath);
生成的CGPath是Core Graphics 对象用来指定任意一个矢量图形.
002 拉伸过滤
缩小和放大拉伸 当我们显示一张图片的时候,都应该正确的显示这个图片(正确的的比例和正确的像素显示在屏幕上)
1.能够显示最好的花枝,像素既没有被压缩也没有被拉伸
2.能够更好地使用内存,因为这就是你要的存储的东西
3.最好的性能表现,CPU不需要为此额外的计算
当图片不要显示不同的大小的时候,有一种拉伸过滤的算法就起到作用了,它作用于原图的像素上并根据需要生成新的像素显示在屏幕上.CALayer为此提供了三种拉伸过滤的方法.KCAFilterLinear KCAFilterNearest KCAFIiterTrinear
minification magnification 过滤器采用KCAFilterLinear 双线性滤波算法,而KCAFIiterTrinear 三线性滤波算法存储了多个大小情况下的图片(多重贴图),并三维取样,同时结合大图和小图的存储进而得到最后的结果.KCAFilterNearest比较干脆直接最近的单像素点不管其他颜色,这样做会导致图片压缩质量不高,图片放大后明显块状或者马赛克严重.
透明 CALayer 中有个shouldRasterize属性 翻译成中文是栏栅化 如果设置成YES 在应用透明度之前,图层及其自图层都会整合成一个整体的图片.为了启用shouldRasterize属性,设置rasterizationScale属性去适配屏幕,以防止出现Retain屏幕像素问题.