好吧,我有UIView
,显示的CGPath
相当宽。它可以在UIScrollView
水平滚动。现在,我使用CATiledLayer
视图,因为它的宽度超过1024像素。
所以我的问题是:效率这么高吗?
- (void) drawRect:(CGRect)rect {
CGContextRef g = UIGraphicsGetCurrentContext();
CGContextAddPath(g,path);
CGContextSetStrokeColor(g,color);
CGContextDrawPath(g,kCGPathStroke);
}
基本上,每次绘制图层中的图块时,我都会绘制整个路径。有没有人知道这是一个坏主意,还是CGContext相对聪明只绘制剪切矩形内的路径部分?
这条路径大多是以这样的方式设置的,我可以把它分解成大小和形状与瓷砖相似的块,但是我需要更多的工作,需要在路径之间有一些冗余(对于跨越图块边界的形状,并且还需要一些计算来查找要绘制的路径。
向这个方向移动是否值得,或者CGPath已经相对快速地绘制了?
答案 0 :(得分:3)
必要时,Quartz必须将它绘制的所有内容与它所绘制的CGContext的尺寸相关联。但是,如果您只发送在该图块中可见的几何图形,它仍将保存CPU。如果你通过准备多个路径来实现这一点,每个瓷砖一个,你就是在谈论做一次剪裁(当你创建多个路径时),而每次绘制瓷砖时石英都会这样做。效率的提升将取决于你的道路有多复杂:如果它是一些简单的形状,没什么大不了的;如果它是国家公路网的矢量绘制地图,它可能是巨大的!当然,您必须将此加速交易与代码的复杂性进行交换。
你可以做的就是使用乐器来看看在你疯狂优化之前在Quartz花了多少时间。