iOS学习笔记1 -- 触摸与手势
来源:互联网 发布:人体工学椅 入门 知乎 编辑:程序博客网 时间:2024/04/28 08:18
iOS学习笔记1 – 触摸与手势
- 触摸
- 手势
触摸
- 触摸响应方法
- 响应者链
- 响应者链的时间传递过程
- UIview不接受触摸事件的3中情况
- 事件
- 补充
触摸响应方法
如果想通过自定义事件响应用户触摸事件,则通过UIResponder的4个方法实现:
1:• -(void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event;
当用户手指开始触摸控件时触发
2:• -(void)touchesMoved:(NSSet )touches withEvent:(UIEvent )event;
当用户手指在空间上移动时触发
3:• -(void)touchesEnded:(NSSet )touches withEvent:(UIEvent )event;
当用户手指结束触摸控件(手指抬起)时触发
4:• -(void)touchesCancelled:(NSSet )touches withEvent:(UIEvent )event;
当系统事件(电话呼入,内存不足)终止触摸事件时触发该方法
响应者链
在iOS中不是所有对象都能响应时间,只有继承UIResponder的对象就可以作为事件的响应者.在iOS的UI控件中不是继承UIview就是继承UIControl,而UIControl继承UIview,,UIview继承了UIResponder,故所有的UI控件都能响应事件.
响应者链:每一个时间都有一个响应链,包含众多时间响应者.用户和一个控件开始交互(点击,滑动等等)时第一响应者是该控件,作为响应者链的开始,然后事件由响应者链开始传递直到被某个响应者处理(没有处理这丢弃不管).
响应者链的时间传递过程
•通常来说第一响应者(响应者链的开始)是某个UIview或者UIview子类控件,用户开始交互是时间由该控件自己处理
•如果控件不能处理则传到该空间对应的视图控制器
•如果视图控制器不能处理则传到该控件的父view
•重复第二第三步,当最底层view还不能处理是则传到UIwindow
•如果UIwindow还不能处理则传递到UIApplication的委托对象即AppDelegate
•如果还不能处理则丢弃
UIview不接受触摸事件的3中情况
•不接受用户交互userInteractionEnable = NO;比如UILabel,UIImageView等控件userInteractionEnable默认值为no,要交互则需要手动改为YES
•隐藏:hidden=YES;
•����透明:alpha=0.0~0.01;
事件(UIEvent)
•����一个UITouch表示一个触摸
•����一个UIEvent表示一个时间
•����事件对象包含当前多点触摸相对应的所有对象
•获取触摸事件的坐标
补充
当触摸一次和两次响应不同方法是,我们会发现点击两次会同时触发点击一次和点击两次的方法,我们可以改写一下就可以只响应点击两次
•����1)第一种方法在方法中判断tapCount
•����2)第二种先延迟执行点击一次的方法,如果在规定事件内有第二次点击这取消执行方法,否则执行点击一次的方法
[self performSelector:@selector(tap) withObject:nil afterDelay:0.4];方法中的afterDelay是延迟时间
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tap) object:nil];取消执行方法
手势
������������通过touches��������方法监听事件,不容易区分用户的具体手势行为.故苹果推出了手势处理器��(UIGestureRecognizer)
- 使用手势处理器处理用户手势的步奏
- UIGestureRecognizer常用方法和属性
- 手势–点击
- 手势–捏合
- 手势–旋转
- 手势–轻扫
- 手势–拖动
手势–长按
使用手势处理器处理用户手势的步奏
1:根据程序要处理的手势创建对应的手势处理器对象.并指定对应的target和action参数(该控件发生创建的手势后,改target和action方法会响应).
2:如果该UI控件不允许交互则userInteractionEnable要手动设为YES,如果希望多点交互mutipleTouchEnabled属性要设为YES.
3:调用该UI控件的addGestureRecognizer:方法添加手势处理器UIGestureRecognizer常用方法和属性
• - (CGPoint)locationInView:(UIView*)view;返回手势在的view控件中的触摸位置(相对控件左上方的坐标)
• - (NSUInteger)numberOfTouches;返回手势触点数量
• view��:返回激发手势的UI控件
• enabled��:设置和返回手势控制器是否可用
• state��:获取该手势的状态
UIGestureRecognizerStateBegan:手势刚开始
UIGestureRecognizerStateChanged:手势改变时
UIGestureRecognizerStateEnded:手势结束时状态手势–点击
• UITapGestureRecognizer(点击手势) 除了拥有其父类(UIGestureRecognizer)的方法,还有提供了两个属性
• numberOfTapsRequired:指定手势只处理触摸(点击)几次的事件
• numberOfTouchesRequired��: 指定只处理几个手指(触摸点)的触摸事件
手势–捏合
• UIPinchGestureRecognize(捏合手势) 和UITapGestureRecognizer(点击手势) 使用步奏相同,同样除了拥有其父类(UIGestureRecognizer)的方法,还有提供了两个属性
• scale:获取捏合比例
• velocity:获取捏合速度
手势–旋转
• UIRotationGestureRecognizer(旋转手势),使用步奏和上面两个一样,除了父类方法属性有两个获取旋转相关的信息
• rotation:获取旋转角度
• velocity:获取旋转速度
手势–轻扫
• UISwipeGestureRecognizer(轻扫手势),步奏父类同,两个轻扫的属性
• numberOfTouchesRequired:设置值处理几个手指的触摸事件
• direction:枚举值,设置该处理器只处理某个方向(up,down,right,left)的轻扫事件
手势–拖动
• UIPanGestureRecognizer(拖动),步奏父类同,两个拖动的属性
• maximumNumberOfTouches:设置最多支持几个手指拖动
• minimumNumberOfTouches:设置最少需要几个手指拖动
此外还有两个方法获取有关拖动的信息:
• translationInView:获取手指在控件上的位移.返回一个CGPoint类型,x代表水平位移值,y值代表垂直方向位移值
• -velocityInView:获取手势在控件上的速度.同样返回一个CGPoint类型值,x代表水平速度,y值代表垂直速度(想到了高中物理速度分解).
手势–长按
��������������������������在用户用一个或多个手指在屏幕上长按,不松开的过程中,可以用UILongPressGestureRecognizer来检测到用户的这种手势
• UILongPressGestureRecognizer 步奏父类同,有一下属性设置手势处理器相关信息
• minimumPressDuration: 指定用户至少按多长时间触发长按手势.默认0.5s
• allowableMovement: 指定手势允许用用户手指移动的最大距离,超过这个距离这手势失败.
• numberOfTouchesRequired:指定用户必须几个手指按在屏幕上长按多久才能触发长按手势
上面代码长按一次会打印两次”触发长按手势”,因为在长按手势开始和结束都会触发一次handleLongPress:方法.其实是响应了不同状态的才会多次触发该方法.故我们需要在handleLongPress:里面加上判断
- iOS学习笔记1 -- 触摸与手势
- IOS学习笔记之触摸与手势
- ios自用学习笔记-触摸事件与手势识别
- iOS开发笔记-触摸事件与手势
- 《iOS开发笔记-触摸事件与手势》
- IOS触摸与手势
- iOS多点触摸与手势
- ios 触摸与手势 UItouch
- iOS触摸事件与手势
- IOS之触摸与手势
- iOS学习笔记—— 触摸及手势
- IOS基础学习日志(四)手势与触摸
- iphone的手势与触摸编程学习笔记
- IOS学习 触摸和手势UITouch 捏合
- iOS——触摸事件与手势
- iOS的触摸与手势识别
- iOS触摸事件与手势识别详解
- 学习笔记 - 触摸事件&手势识别
- Jmeter(4)----参数化
- nginx的配置、虚拟主机、负债均衡和反向代理(3)
- Set terminal text color and transparent background
- PXE+KickStart无人值守安装配置
- Android Studio中的六种依赖
- iOS学习笔记1 -- 触摸与手势
- 多重背包
- java提高篇(十二)-----equals()
- listview 下面添加button方法
- Linux下的JDK安装与卸载
- signal查看
- windows下Python3.4安装numpy时出现 “Unable to find vcvarsall.bat ”
- 《RocketMq》三、NameServer
- java提高篇(十三)-----字符串