【问题标题】:How to Call drawRect programmatically in objective c如何在目标c中以编程方式调用drawRect
【发布时间】:2010-05-04 10:33:27
【问题描述】:

如何在目标 c 中以编程方式调用 drawRect ?

我想在 UItabbarcontroller 中调用视图的 drawrect 方法。我怎么能这样做?提前谢谢..

编辑

当视图当前不可见时,我必须调用。这将是我第一次必须调用该视图

【问题讨论】:

  • 为什么要绘制视图而不将其实际放在屏幕上?此外,您永远不应该直接致电drawRect:super 除外)。
  • 假设我在应用启动后没有选择第一个选项卡。从第二个选项卡选择中,我想显示第一个选项卡的内容更改。内容更改意味着我必须更改 UITextfield 等。现在发生的事情是第一次我选择的选项卡的文本字段没有改变。但是当我再次选择它会改变。

标签: iphone objective-c drawrect


【解决方案1】:
[myView.layer display];

强制视图立即绘制自己。

[myView setNeedsDisplay: YES];

强制视图在下一个事件循环周期重绘。

但是,如果你需要在它不可见的情况下调用它,我认为你的视图类的设计有问题。您应该只在 drawRect: 内进行绘图:而不是其他任何东西。如果你只是在画画,为什么在视图不可见的时候画呢?

【讨论】:

  • 在某些情况下,您确实希望将其渲染到屏幕外,即您打算使用视图的内容(例如,对其进行截图等)并缓存或在其他地方使用它。就我而言,我想截取用户不一定看到的视图并将该视图的图像保存到磁盘。
  • 我不确定我是否理解这个解决方案。 UIView 没有 display 方法。
  • 我相信他的意思是[myView.layer display]
  • 是的,他的意思可能是[myView.layer display]。但这不应该直接调用。苹果对CALayer display的引用:“不要直接调用这个方法。图层在适当的时候调用这个方法来更新图层的内容”
  • 另外,setNeedsDisplay 不接受任何参数。
【解决方案2】:

【讨论】:

  • 感谢您的回答。但是 setNeedsDisplay 只有在视图可见时才会调用。在我的情况下,视图将不可见。对不起。我的问题具有误导性。我已经编辑了我的问题
【解决方案3】:

【讨论】:

    【解决方案4】:

    斯威夫特:

    yourView.setNeedsDisplay()
    

    yourView.setNeedsDisplay(newRect)
    

    【讨论】:

      【解决方案5】:

      view.layer.renderInContext(context: CGContext) 可以将视图的内容绘制到 CGContext 中,例如位图。

      view.snapshotViewAfterScreenUpdates(afterUpdates: Bool) 为您提供视图的快照。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多