【问题标题】:How to call -(void)drawRect:(CGRect)rect如何调用 -(void)drawRect:(CGRect)rect
【发布时间】:2017-02-01 09:09:30
【问题描述】:

我怎么打电话

-(void)drawRect:(CGRect)rect

https://github.com/stkim1/MTImageMapView/blob/master/MTImageMapView/MTImageMapView.m

来自另一个UiViewController 定期与NSTimer

【问题讨论】:

  • 为什么你需要调用drawrect()作为它的默认方法并且在初始化时会自动调用。请说明为什么需要定期调用 drawract() ?
  • 您的 UIViewController 上的 UIView 中是否有此地图视图的实例?只需在该视图上调用setNeedsDisplay,它就会处理重绘。您不应该直接访问 drawRect - 它会根据需要由控制类调用
  • CodeChanger- 实际上我想在状态中显示位置标记,我需要每秒更新标记到另一个状态,我已经制定了一个逻辑来显示位置标记以及它的状态应该下一步,但无法更新视图
  • 创建一个方法,在该方法中您可以更改标记的值并调用setNeedtoDisplay() 来重绘该视图。
  • CodeChanger - 我试过了,但 setNeedtoDisplay() 没有响应

标签: ios objective-c iphone drawrect


【解决方案1】:

来自documentation

讨论

这个方法的默认实现什么都不做。子类 使用 Core Graphics 和 UIKit 等技术来绘制他们的 视图的内容应该覆盖这个方法并实现它们的绘图 那里的代码。如果您的视图集,则不需要覆盖此方法 它的内容以其他方式。例如,您不需要覆盖 如果您的视图只显示背景颜色或者您的 视图直接使用底层对象设置其内容。

...

如果你直接继承UIView,你对这个方法的实现 不需要调用super。但是,如果您将子类化为 不同的视图类,你应该在你的某个时候调用 super 实施。

第一次显示视图或发生事件时调用此方法 发生使视图的可见部分无效。 你不应该 自己直接调用这个方法。要使您的部分视图无效, 并因此导致该部分被重绘,调用setNeedsDisplaysetNeedsDisplayInRect: 方法。

【讨论】:

    【解决方案2】:

    是的,我找到了解决方案,我在 drawrect 函数的末尾调用带有计时器的函数并在其中调用 setNeedsDisplay()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多