UIView(不是 UIViewController)是否有任何 viewDidAppear 方法?

Is there any viewDidAppear method for UIView (not UIViewController)?

我需要了解 UIView 何时出现在屏幕上,因此我需要 viewDidAppear 方法的模拟。

我找到了一个 UIView 生命周期:

  1. willMoveToSuperview
  2. invalidateIntrinsicContentSize
  3. didMoveToSuperview
  4. awakeFromNib
  5. 将移动到窗口
  6. 需要更新约束
  7. didMoveToWindow
  8. setNeedsLayout
  9. 更新约束
  10. 布局子视图
  11. 绘制矩形

我尝试了所有这些方法,但我没有得到答案。

UIView 中没有 viewDidAppear。您可以重写 func drawRect 以对 UIView 继承视图进行任何 UI 更改。

SideNote - 如果您希望 get drawrect 稍后更新,请致电 setNeedsDisplaysetNeedsDisplay不会立即调用drawRect,而是将接收者的整个边界矩形标记为需要重绘。

换句话说 - 你永远不应该自己调用 drawRect。相反,您告诉系统需要使用 setNeedsDisplay 方法完成绘制,该方法将视图标记为脏。然后在下一个更新周期调用子类的 drawRect 方法。

根据 OP(@Alexander) 的查询,他只需要设置一些变量,因此建议使用以下任何覆盖函数,具体取决于需要执行的操作

  • -(void)didMoveToSuperview - 观看后立即发送 插入到视图层次结构中。

  • -(void)didMoveToWindow - 在视图获取其后立即发送 window 属性 集.

  • -(void)willMoveToSuperview:(UIView *)newSuperview - 已发送 在视图作为子视图添加到另一个视图之前; newSuperview 当你从它的视图中移除视图时可能为 nil superview.

  • -(void)willMoveToWindow:(UIWindow *)newWindow - 立即发送 在将视图(或其父视图)添加到 window 之前; newWindow 当您从 window.

  • 中删除视图时可能为零

看,viewDidAppearUIViewController 的方法,代表 ViewController 的 view 确实出现的时刻,并允许您声明应该发生什么。

UIView没有这样的方法。这来自 MVC 模式:在这种情况下,控制器是 UIViewController,它控制更改、操作等,而 view 正是控制器显示的内容。