0

我通过在 iPhone 应用程序上拖动手指来绘制多种颜色,但是当我最小化应用程序然后最大化时,我失去了所有的绘图,因为它调用了drawrect方法。我不知道从哪里调用此方法,但我看不到此问题的任何解决方案。主要是当我在设备上运行许多应用程序时发生。我认为 iOS 会删除缓冲区中的所有数据,以防止 iPhone 性能低下。这个问题的解决方案是什么?为什么它会丢失图纸?请帮忙!我没有找到这个问题的任何解决方案。

4

3 回答 3

1

我丢失了所有的绘图,因为它调用了drawrect方法。

从您的问题来看,似乎您没有在 drawRect 方法中绘图,每次更新/加载视图时都会调用 drawrect 方法。所以当你从后台进入时会调用drawrect方法。如果您没有在 drawrect 方法中处理绘图机制,则会丢失所有数据。

苹果表示

此方法的默认实现什么也不做。使用原生绘图技术(如 Core Graphics 和 UIKit)来绘制其视图内容的子类应覆盖此方法并在那里实现其绘图代码。如果您的视图以其他方式设置其内容,则无需重写此方法。例如,如果您的视图仅显示背景颜色,或者您的视图直接使用底层图层对象设置其内容,则不需要覆盖此方法。同样,如果您的视图使用 OpenGL ES 进行绘图,则不应覆盖此方法。

如果您以其他方式处理它,那么您需要在 viewwillAppear 中绘制视图后处理它。

否则可能是内存原因,因为如果您收到内存警告,通常会在您初始化数据的地方调用 ViewDidLoad。

于 2013-02-21T04:44:44.003 回答
1

因为你的视图是在后台卸载的,当你回到前台时,视图会被重新创建,所以它会重绘。

当你进入后台时,如果设备内存不足,苹果会卸载后台应用的视图(甚至关闭你的应用),为当前运行的应用扩大内存。您的视图已卸载,当您返回前台时,视图将由“数据”重新创建,因此请确保不要在视图中保存“数据”。

并且可能在 IOS6 中,Apple 修改了机制

于 2013-02-21T03:39:37.657 回答
0

框架将根据需要调用 drawRect,在调用时绘制视图是您的责任。您应该存储用户操作所需的任何状态,以便在调用 drawRect 时重绘视图。

于 2013-02-21T03:38:48.580 回答