【问题标题】:Losing all drawing when app comes in foreground当应用程序进入前台时丢失所有绘图
【发布时间】:2013-02-21 03:24:49
【问题描述】:

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

【问题讨论】:

    标签: iphone ios drawing drawrect


    【解决方案1】:

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

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

    也许在 IOS6 中,Apple 修改了机制

    【讨论】:

      【解决方案2】:

      由于它调用 drawrect 方法,我丢失了所有绘图。

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

      Apple States that

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          相关资源
          最近更新 更多