IOS知识点

UIView 重绘相关的方法

参考

1、layoutSubviews

用于对subview 的重新布局,初始化时在viewDidLoad 之后调用;frame change, addSubview以及UIScrollView滚动时触发。

该方法不能直接调用,使用setNeedsLayout 配合layoutIfNeeded 出发系统调用。

2、drawRect 重新绘制 frame 中的内容,初始化是在viewDidLoad 之后;调用setNeedsDisplaysetNeedsDisplayInRect时主动触发;同layoutSubviews ,该方法也不能直接调用;

为一个UIView 添加事件绑定

参考 参考

1、通过UIResponder方法 UIView 实现了UIResponder 协议,因此在继承UIView 时,可以重写其如下方法来实现对事件的绑定:

// 触摸事件
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

// 加速计事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;

// 远程控制事件
- (void)remoteControlReceivedWithEvent:(UIEvent *)event;

不接收用户交互时不能够处理事件:

  • userInteractionEnabled = NO
  • 当一个控件隐藏的时候不能够接收事件:Hidden = YES的时候
  • 当一个控件为透明白时候也不能够接收事件:alpha = 0.0 ~ 0.01

通过继承UIControl

像UIButton可以直接添加一个target,这就是继承制UIControl的控件。查看文档会发现UIControl直接继承了UIView 并添加了自己的方法。

继承制UIControl 的控件可以直接使用 addTarget(_:action:for:)方法绑定事件。

使用UITapGestureRecognizer 使用手势来监控用户在屏幕上的操作及触摸范围,以范围来进行事件处理。

后记

烦,烦,烦