现在我有以下内容:
- (void)drawRect
{
// some drawing
[bgImage drawinRect:self.bounds];
// some drawing
}
我有 40 多个视图,里面有文字和一些标记。我需要在用户点击时重新绘制所有这些视图 - 它应该非常快!
我检测了我的代码并看到:所有执行时间的 75%是调用[MyView drawRect:]
,而我的 drawRect 时间的 95% 是[bgImage drawinRect:self.bounds]
调用。我需要在 GPU 或 CPU 内绘制背景。这怎么可能?
我试过的:
- 使用子视图而不是 drawRect。在我的情况下,由于无法混合的颜色,它非常慢。
- 添加 UIImageView 作为背景没有帮助,我们不能在子视图上绘制......
- 将图像层添加到 CALayer?可能吗?
更新:
现在我正在尝试使用 CALayer 而不是 drawInRect。
- (void)drawRect
{
// some drawing
CALayer * layer = [CALayer layer];
layer.frame = self.bounds;
layer.contents = (id)image.CGImage;
layer.contentsScale = [UIScreen mainScreen].scale;
layer.contentsCenter = CGRectMake(capInsects.left / image.size.width,
capInsects.top / image.size.height,
(image.size.width - capInsects.left - capInsects.right) / image.size.width,
(image.size.height - capInsects.top - capInsects.bottom) / image.size.height);
// some drawing
}
现在除了这个新层之外什么都看不见。我所有的画都在这一层下,我想......