gpt4 book ai didi

ios - drawInRect 方法运行速度太慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:49:19 25 4
gpt4 key购买 nike

现在我有以下内容:

- (void)drawRect
{
// some drawing

[bgImage drawinRect:self.bounds];

// some drawing
}

我有 40 多个 View ,里面有文字和一些标记。我需要在用户点击时重新绘制所有这些 View - 它应该非常快!

我分析了我的代码并发现:所有执行时间的 75% 是 [MyView drawRect:] 而我的 drawRect 时间的 95% 是 [bgImage drawinRect:self.bounds]调用。我需要在 GPU 或 CPU 中绘制背景。怎么可能?

我尝试过的:

  1. 使用 subview 代替 drawRect。在我的例子中,由于 不可启动 颜色混合,它非常慢。
  2. 添加 UIImageView 作为背景没有帮助,我们不能在 subview 上绘制 ...
  3. 向 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
}

现在除了这个新图层之外什么都看不到。我认为我所有的画都在这一层下......

最佳答案

我会使用 UILabel;您可以通过为标签提供背景颜色或在包含这些标签的 View 层上设置 shouldRasterize = YES 来降低混合成本。 (您可能还希望将 rasterizationScale 设置为与 [[UIScreen mainScreen] scale] 相同)。

另一个建议:

有许多开源日历组件可能不得不尝试解决相同的问题。也许您可以看看他们是如何解决这些问题的。

关于ios - drawInRect 方法运行速度太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com