一、UIView概念
- UIView是层级结构的基石。所有视图都被组织在一个树状结构中,称为视图层级(View Hierachy)。最顶层的视图通常是UIWindow。
- UIView使用二维坐标系,左上角是坐标原点。
- UIView的autoresizingMask属性,注意flexibleLeftMargin指左边与父视图左边的距离可边,即是右边固定;flexibleRightMargin指右边与父视图右边距离可变(左边固定)。
二、UIView的drawRect方法重写
- 需要多次重复绘制的情况下,需要调用UIView中的setNeedsDesplay方法,程序会自动调用drawRect方法进行绘制;
- UIView的opaque属性默认是YES,如果重写drawRect方法,没有设置背景色,UIView的背景会显示黑色,需要背景透明,将opaque设置为NO;
- 图层叠加的理想公式是:R = S + D * (1 - Sa),R表示混合结果的颜色,S是源颜色(上层颜色),D是目标颜色(下层颜色),Sa是源颜色的透明度,当opaque为1时,Sa为1,则R = S。因此GPU不会做任何的计算合成,优化了性能;
三、交互相关属性
- userInteractionEnable 默认是YES,如果设置为NO则不响应用户事件;
- exclusiveTouch 默认是NO,否则UIView会独占整个Touch事件;
- multipleTouchEnabled 默认是NO,如果设置则支持多点触摸
四、触摸事件
当手指触摸屏幕时,系统会将UITouch对象封装在UIEvent事件对象中发送给程序,由UIApplication对象将事件分发。响应者对象是可以响应事件并对事件作出处理的对象。响应者链表示一系列响应者对象组成的事件传递的链条。当找到第一响应者后,事件交由第一响应者处理,如果第一响应者不处理事件,可以沿着响应链交给下个响应者。处理过程:第一响应着是UIView或者UIView的子类,如果它不处理,事件交给它的UIViewController处理(如果有),如果没有UIViewController,就交给它的superView父视图处理,至到顶层。如果顶层不处理则交给UIWindow处理,再到UIApplication。如果整个响应链都不响应则该事件被丢弃。注意响应链中的对象继承于UIResponder类。
事件处理函数
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
当触碰被取消,或者被来电打断,会调用touchesCancelled:touches:方法.
五、运动事件
除了触摸事件外,UIResponder还提供了运动事件的支持
运动事件的方法
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
六、总结
以上就是今天对UIView的一些总结。
979

被折叠的 条评论
为什么被折叠?



