【问题标题】:iPhone: no way to draw on screen outside drawRect?iPhone:无法在drawRect之外的屏幕上绘图?
【发布时间】:2010-05-13 15:19:10
【问题描述】:

有没有办法在该视图的 drawRect() 方法之外在 iPhone 屏幕上(在 UIWindow 中的 UIView 上)进行绘制?如果是,如何获取图形上下文?

图形指南提到了 NSGraphicsContext 类,但相关章节似乎是从 Mac OS X 文档中复制/粘贴的,iPhone SDK 中没有这样的类。

编辑:我正在尝试在触摸事件处理程序中修改视图的内容 - 突出显示触摸的视觉元素。在 Windows 中,我会使用 GetDC()/ReleaseDC() 而不是 InvalidateRect()/WM_PAINT 的完整周期。尝试在这里做同样的事情。将活动(可触摸)元素安排为子视图会极大地降低性能,因为它们有大约数百个。

【问题讨论】:

  • 也许您可以提供更多背景信息来说明您要通过此实现的目标?这可能有助于其他人提出替代方案。

标签: iphone cocoa-touch core-graphics


【解决方案1】:

没有。绘图是drawRect:(或CALayer)的工作。即使您可以在其他地方绘图,这也会是代码的味道(就像在 Mac 上一样)。任何其他代码都应该简单地更新您的模型状态,然后将自己设置为需要显示。

当您需要显示时,将显示代码移到别处不会使其运行得更快。当你不需要显示时(因此没有设置为需要显示),如果显示代码在drawRect:,则显示代码不会运行。

我正在尝试在触摸事件处理程序中修改视图的内容 - 突出显示触摸的可视元素。在 Windows 中,我会使用 [Windows 代码]。 ... 将活动(可触摸)元素安排为子视图会极大地降低性能,因为它们有大约数百个。

听起来 Core Animation 可能更适合这个。

【讨论】:

    【解决方案2】:

    我认为你不能在 drawRect 之外绘制...但是要获取当前的图形上下文,你要做的就是 CGContextRef c = UIGraphicsGetCurrentContext();希望有帮助。

    【讨论】:

    • UIGraphicsGetCurrentContext() 如果在 drawRect() 之外调用,则返回 nil。
    • 真的吗?很高兴知道......无论如何,如果你想重绘你可以在你的视图上调用 setNeedsDisplay,它会再次调用 drawRect,你可以绘制任何你需要的东西
    • 我特意询问是否存在替代方案。我会回答“否”:)
    • 好吧,你不能这样做,drawRect 是 UIView 进行绘图的地方
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多