iOS-UIControls类介绍
UIControl的继承关系
UIControl是 UIKit中UISwitch(开关)、UIButton(按钮)、UISegmentedControl(分段控件)、UISlider(滑块)、UITextField(文本字段控件)、UIPageControl(分页控件)等控件的父类。同时UIControl也是UIView的子类,当然它也是UIResponse的子类。
下面是UIControl的关系图
UIControl的作用
从上面的关系图中,我们可以看到,UIControl是UIView的子类,因此我们可以像编写UIView一样编写控件,可以调用
addSubview:
等方法。-
同时他也是UIResponse的子类,也是一个响应者。当对屏幕触发一个点击事件,事件通过响应链传到UIContol的子类上。此时将触发以下事件:
- UIResponder父类中触发手势方法(如touchBegan:withEvent)
- UIControl对UIResponse中的手势方法进行封装,转换成一个简单的事件。通过指定的事件处理机制,调用对应的方法。
因此,简单的理解就是,UIControl把复杂的触摸事件封装成了简单的易于使用的控件事件。例如通过UIControl对象处理后,按下按钮的事件就被封装成一个控件事件,而不用去判断触摸屏幕的整个操作过程。
例如按钮的单击事件:UIControlEventTouchUpInside
UIControl-Tracking属性介绍
查看UIControl的声明文件,发现有一个属性不太理解,这里特别来说明一下:
@property(nonatomic,readonly,getter=isTracking) BOOL tracking;
**解释**
A Boolean value that indicates whether the receiver is currently tracking touches related to an event. (read-only)
The value is YES if the receiver is tracking touches; otherwiseNO.
**我的理解**
属性含义:track--跟踪。顾名思义就是当对手势进行跟踪时,此属性为yes。即对control控件使用pan,pinch手势时,此属性为yes。
属性作用:tracking为read-only,只可以观察。用来查看control控件是否处于跟踪手势状态。
既然tracking属性为read-only,只读属性。那么,我们通过什么来控制跟踪状态,我们又通过什么来对pan,pinch手势进行响应呢?
在声明文件tracking下方,有这4个方法,我们可以通过这4个方法来响应手势。
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)cancelTrackingWithEvent:(UIEvent *)event;
UIControl自定义控件
自定义滑动进度条按钮
,用到了tracking跟踪属性
,也触发了一个事件消息。
代码比较简单,我在这个不具体说明了。下面是效果图:
代码地址:
http://download.csdn.net/detail/daiyibo123/9158095