【问题标题】:On iPhone and iPad, can we draw anything without using drawRect?在 iPhone 和 iPad 上,我们可以在不使用 drawRect 的情况下绘制任何东西吗?
【发布时间】:2012-04-22 09:04:05
【问题描述】:

似乎绘制点、线、圆和贝塞尔路径的标准方法是将它们绘制在drawRect 内部。我们不直接调用drawRect,而是让iOS调用它,我们可以用[self setNeedsDisplay]告诉iOS在可以调用drawRect的时候尝试调用...

看来我们也不能依赖

[self setClearsContextBeforeDrawing: NO];

在调用drawRect 之前不清除视图的背景。这个问题中有一些细节:UIView: how to do non-destructive drawing?

直接在屏幕上绘图怎么样——不把这些代码放在drawRect 中。比如ViewController.m,有一些代码直接在屏幕上画点、线、圆。这可能吗?

【问题讨论】:

  • 当然,完全不使用 UIKit 绘图,而是使用 OpenGL ES 或更高级别的框架(如 Cocos2D)进行绘图时也是可以的。
  • 是吗?只使用 iOS 框架怎么样?它可能像 Win32 一样能够在不在重绘函数中绘制任何东西(当任何矩形区域“无效”时)
  • 而你必须依赖 Cocos2D 或 OpenGL ES 来完成它吗? Apple 的 iOS 框架不能做到这一点?

标签: ios uiview uikit


【解决方案1】:

不必进入 OpenGL,绕过擦除的最接近方法是使用 CGBitmapContextCreateImage 之类的东西将上下文转换为图像。从那里,您可以将图像保留在内存中(或在必要时将其写入磁盘),然后在重绘视图时,首先将原始图像绘制到上下文中,然后用新内容覆盖它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2016-09-12
    相关资源
    最近更新 更多