【问题标题】:What is the fastest way to implement a UIView background?实现 UIView 背景的最快方法是什么?
【发布时间】:2009-08-23 12:53:26
【问题描述】:

我有一个 UIView,我想给它一个渐变背景,我想知道如何尽可能高效地实现它。

我正在考虑三个选项:

  1. 创建一个 UIImageView 作为子视图,并给它一个渐变的图像来显示。

  2. 在原UIView的drawRect:中绘制渐变图。

  3. 在 drawRect: 中绘制渐变,但这次使用 CoreGraphics '从头开始创建'。

这三个中哪一个是最快/最少的内存密集型? (跑得最快,不写。)

谢谢!

【问题讨论】:

    标签: iphone uikit core-graphics


    【解决方案1】:
    • 创建 UIImageView 作为主视图的子视图将是获得所需内容的最快方法。
    • 将图像绘制到视图的上下文中会占用更多内存。
    • 使用 Core Graphics 在代码中绘制渐变会是更有效的方法。

    注意事项:

    您几乎无法控制 drawRect 执行的频率,因此您不希望在该方法中执行诸如内存分配之类的事情。

    drawRect 可以在同一个运行循环中多次调用,因此在该方法期间创建自动释放对象也不是一个好主意,因为它们可能会堆积起来并消耗不必要的内存。

    【讨论】:

    • 创建一个图像然后在 drawRect: 中绘制它会更占用内存,但比每次都绘制一个渐变要快。如果应用受 CPU 限制,请使用缓存图像;如果应用内存受限,则直接绘制渐变。
    【解决方案2】:

    如果将渐变渲染到 UIImage 中很方便 - 您可能需要考虑类似的东西。

    UIImage *gradientImage = GetGradientImage(); // 你的代码 self.view.backgroundColor = [UIColor colorWithPatternImage:gradientImage];

    您需要在大梯度所需的内存与重复计算和绘制它所需的时间之间取得平衡。

    这适用于许多您想要对背景进行细微自定义的地方,或者您认为需要 UIImageView 来在另一个视图上绘制背景的地方。

    托德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多