iOS手势操作简介(一)

来源:互联网 发布:mac子弹头 dubonnet 编辑:程序博客网 时间:2024/06/05 00:28

iOS中能够响应手势操作的类必须要继承自UIResponder,才能够处理手势响应操作。
默认继承了UIResponder的类有:UIApplication UIViewController UIView都继承自UIResponder.
UIView是UIResponder的子类,可以实现下列4个方法处理不同的触摸事件
**

一根或者多根手指开始触摸view,系统会自动调用view的下面方法

**
- (void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event

一根或者多根手指在view上移动,系统会自动调用view的下面方法(随着手指的移动,会持续调用该方法)
- (void)touchesMoved:(NSSet )touches withEvent:(UIEvent )event

一根或者多根手指离开view,系统会自动调用view的下面方法
- (void)touchesEnded:(NSSet )touches withEvent:(UIEvent )event

触摸结束前,某个系统事件(例如电话呼入)会打断触摸过程,系统会自动调用view的下面方法
(void)touchesCancelled:(NSSet )touches withEvent:(UIEvent )event
提示:touches中存放的都是UITouch对象

UITouch对象:

当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象

一根手指对应一个UITouch对象

UITouch的作用
保存着跟手指相关的信息,比如触摸的位置、时间、阶段

当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指的触摸位置。

当手指离开屏幕时,系统会销毁相应的UITouch对象

提示:iPhone开发中,要避免使用双击事件!

UITouch的属性

触摸产生时所处的窗口
@property(nonatomic,readonly,retain) UIWindow *window;

触摸产生时所处的视图
@property(nonatomic,readonly,retain) UIView *view;

短时间内点按屏幕的次数,可以根据tapCount判断单击、双击或更多的点击
@property(nonatomic,readonly) NSUInteger tapCount;

记录了触摸事件产生或变化时的时间,单位是秒
@property(nonatomic,readonly) NSTimeInterval timestamp;

当前触摸事件所处的状态
@property(nonatomic,readonly) UITouchPhase phase;

UITouch的方法:

(CGPoint)locationInView:(UIView *)view;
返回值表示触摸在view上的位置
这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0))
调用时传入的view参数为nil的话,返回的是触摸点在UIWindow的位置

  • (CGPoint)previousLocationInView:(UIView *)view;
    该方法记录了前一个触摸点的位置

UIEvent 每产生一个事件,就会产生一个UIEvent对象 UIEvent:称为事件对象,记录事件产生的时刻和类型

常见属性
事件类型
@property(nonatomic,readonly) UIEventType type;
@property(nonatomic,readonly) UIEventSubtype subtype;

事件产生的时间
@property(nonatomic,readonly) NSTimeInterval timestamp;

UIEvent还提供了相应的方法可以获得在某个view上面的触摸对象(UITouch)

一次完整的触摸过程,会经历3个状态:
触摸开始:- (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

4个触摸事件处理方法中,都有NSSet *touches和UIEvent *event两个参数
一次完整的触摸过程中,只会产生一个事件对象,4个触摸方法都是同一个event参数

如果两根手指同时触摸一个view,那么view只会调用一次touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象

如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象

根据touches中UITouch的个数可以判断出是单点触摸还是多点触摸

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荣耀9青春版玩王者卡怎么办 红米4x手机声音突然成破音怎么办 红米pro玩王者荣耀卡怎么办 红米手机恢复出厂设置出错了怎么办 红米恢复出厂设置出错了怎么办 应聘工作上当收押金了该怎么办 红米1s密码忘了怎么办 红米1s刷机后开不了机怎么办 红米2a耗电超快怎么办 红米2a手机耗电快怎么办 红米4x触屏失灵怎么办 苹果恢复出厂设置后密码忘记怎么办 红米1s忘记密码锁屏了怎么办 红米3手机忘记解锁图案怎么办 小米5x手机录屏失败怎么办 红米4x手机wif信号不好怎么办 红米4x屏幕换了截屏不好使怎么办 红米手机2a卡慢怎么办? 红米手机连接无线网信号不好怎么办 小米4用久了很卡怎么办 红米4a关不了机怎么办 红米手机屏幕锁了忘记密码怎么办 手机锁了忘记密码怎么办 红米 红米4a开不开机怎么办 红米显示小人开不了机怎么办 红米手机找回微信密码怎么办 红米手机密码忘了怎么办数字锁 红米1s忘了密码怎么办 红米手机下面三个键失灵怎么办 红米note手机没声音了怎么办 魅蓝3s被锁了怎么办 小米5x的4g网速慢怎么办 红米一体机与后盖有裂缝怎么办? 红米4x喇叭坏了怎么办 红米4x电池坏了怎么办 小米电视4a开不了机怎么办 小米x4手机下面三个键失灵怎么办 红米4a一直重启怎么办 红米4a手机一直关机重启怎么办 红米5A手机4G信号差怎么办 红米4x手机黑屏打不开怎么办