在 iPhone 和 iPad 上,我们可以在不使用 drawRect 的情况下绘制任何东西吗?

Posted

技术标签:

【中文标题】在 iPhone 和 iPad 上,我们可以在不使用 drawRect 的情况下绘制任何东西吗?【英文标题】:On iPhone and iPad, can we draw anything without using 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 框架不能做到这一点? 【参考方案1】:

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

【讨论】:

以上是关于在 iPhone 和 iPad 上,我们可以在不使用 drawRect 的情况下绘制任何东西吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone / iPad 上,如何在不使用图像的情况下制作带有凹槽的 Button?

如何在不为 iphone 和 ipad 创建单独的 xib 的情况下为所有 ipad 和 iphone 创建通用 xib?不是故事板

忘记Apple ID密码,如何从iPhone/iPad上移除 iCloud账号?

如何在不使它们不可变的情况下使 python 数据类可散列?

如何在不使项目变灰的情况下禁用 UITabBarItem

在不使浏览器崩溃的情况下分析 JavaScript