现在我有以下内容:
- (void)drawRect
{
// some drawing
[bgImage drawinRect:self.bounds];
// some drawing
}
我有超过40个带有文本和内部标记的视图。我需要在用户点击上重新绘制所有这些视图 - 它应该非常快!
我检测了我的代码并看到:75%的执行时间是[MyView drawRect:]
,而我的drawRect时间的95%是[bgImage drawinRect:self.bounds]
调用。我需要在GPU和CPU中绘制背景。怎么可能?
我尝试了什么:
更新
现在我正在尝试使用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
}
现在看不到这个新图层。我认为所有的绘画都在这层之下......
答案 0 :(得分:1)
我会使用UILabels;您可以通过为标签指定背景颜色或在包含这些标签的视图图层上设置shouldRasterize = YES
来降低混合成本。 (您可能还希望将rasterizationScale
设置为与[[UIScreen mainScreen] scale]
相同。
另一个建议:
有许多开源日历组件可能不得不尝试解决相同的问题。也许你可以看看他们是如何解决的。