LayoutSubView和drawRect

1. 两种方法调用情况

  • layoutSubviews调用情况
  • init初始化UIView不会触发调用
  • addSubview会触发调用
  • 改变view的width和height的时候回触发调用
  • 一个UIScrollView滚动会触发调用
  • 旋转screen会触发调用
  • 改变一个UIView大小的时候会触发superView的layoutSubviews事件
  • 直接调用setLayoutSubviews会触发调用
  • -(void)viewWillAppear:(BOOL)animated会触发一次调用
  • -(void)viewDidAppear:(BOOL)animated 看情况,可能有调用。

什么时候重写layoutSubviews

  1. 自动布局无法满足要求(例如要自定义一个按钮,图片在文字的右侧)
  2. 不要直接调用调用这个方法,可以调用setNeedsLayoutlayoutIfNeeded
  • drawRect调用情况
  • 如果UIView没有设置frame大小,直接导致drawRect不能被自动调用。
  • drawRect在loadView和viewDidLoad这两个方法之后调用
  • 调用sizeToFit后自动调用drawRect
  • 通过设置contentMode值为UIViewContentModeRedraw。那么每次设置或者更改frame自动调用drawRect。
  • 直接调用setNeedsDisplay或者setNeedsDisplayInRect会触发调用

使用注意

  • 在UIView中绘图,只能在drawRect方法中,这个方法可以获取contextRef并绘图。在其他地方获取的是无效的
  • 如果要在layer中绘图只能在drawInContext中绘图
  • 如果要实时绘图不能使用gestureRecognizer,只能用touchBegan等方法来调用setNeedsDisplay实时刷新屏幕。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容