文章目录
  1. 1. 1.介绍
  2. 2. 2.新建
  3. 3. 3.UIView的更新方法
    1. 3.1. 1.layoutSubviews触发条件
    2. 3.2. 2.drawRect触发条件
    3. 3.3. 3.强制调用

1.介绍

UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。UIWindow在程序中主要起到三个作用:

1、作为容器,包含app所要显示的所有视图
2、传递触摸消息到程序中view和其他对象
3、与UIViewController协同工作,方便完成设备方向旋转的支持

三个级别:UIWindowLevelNormal \< UIWindowLevelStatusBar \< UIWindowLevelAlert
0 \< 1000 \< 2000

2.新建

UIWindow *normalWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
normalWindow.windowLevel = UIWindowLevelNormal;
[normalWindow makeKeyAndVisible];

3.UIView的更新方法

1.layoutSubviews触发条件

1.addSubview会触发layoutSubviews。
2.设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
3.滚动一个UIScrollView会触发layoutSubviews。
4.旋转Screen会触发父UIView上的layoutSubviews事件。
5.改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
6.直接调用setLayoutSubviews。
7.直接调用setNeedsLayout。

2.drawRect触发条件

1.在调用sizeToFit后被调用
2.设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:
3.调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。

3.强制调用

layoutSubviews是位置变化, drawRect是重绘自身。可以这样理解吗…
想layoutSubviews就调用setNeedsLayout
想drawRect就调用setNeedsDisplay

文章目录
  1. 1. 1.介绍
  2. 2. 2.新建
  3. 3. 3.UIView的更新方法
    1. 3.1. 1.layoutSubviews触发条件
    2. 3.2. 2.drawRect触发条件
    3. 3.3. 3.强制调用