触摸与手势

1. 触摸

  触摸(Cocoa Touch)就是用户手指放在屏幕上一直到手指离开。触摸是在UIView上进行的。当用户触摸到屏幕时,触模事件就会发生。本节将主要讲解触摸的阶段以及这些阶段所对应的的方法。

1.1 触摸阶段

  当用户的手指放在屏幕上就实现了触摸,但是触摸并不是一直持续的。当手指离开屏幕这一次触摸就结束了。这一次触摸共分为5个阶段。如下表所示:

触摸的5个阶段

触摸阶段 功能
UITouchPhaseBegan 手指刚触摸到屏幕
UITouchPhaseMoved 手指在屏幕上移动
UITouchPhaseStationary 手指在屏幕上没有移动
UITouchPhaseEnded 手指离开触摸的屏幕
UITouchPhaseCancelled 由于某些原因,造成触摸终止

  注意:不是只有某一次触摸事件才会有这5咯阶段,而是每一次触摸事件都会有这5个事件。 

1.2 触摸方法

  对于这5咯触摸的阶段,该如何实现呢?在UIResponder类中,对应着5个阶段给出了方法,如下表所示:

触摸方法

触摸阶段 方法
UITouchPhaseBegan -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
UITouchPhaseMoved -(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event;
UITouchPhaseStationary
UITouchPhaseEnded -(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event;
UITouchPhaseCancelled -(void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event;

  【示例 - 手指触摸到屏幕时,触摸的地方会出现彩色小圆。手指在屏幕上移动,小圆变成正方形】

2 手势

  通过触摸可以实现各种各样的手势,例如轻拍、捏、旋转等。在iOS中,常用到的手势被封装到一个UIGestureRecognizer类中。一个手势就对应一个手势识别器。本节将主要讲解iOS中常用手势以及它对应的手势识别器。

2.1 轻拍

  轻拍手势一般使用UITapGestureRecognizer手势识别器进行识别。要使用UITapGestureRecognizer手势识别器,就要对其创建。创建方式有两种:一种是使用静态创建方式,一种是使用动态创建方式。一下主要讲解这两个创建方式。

  1> 静态创建UITapGestureRecognizer手势识别器,需要在创建的项目中打开Main.storyboard文件,从试图库中找到Tap Gesture Recognizer手势识别器,拖动到设计界面上。这是会在设计界面的Dock工作区中出现添加的手势识别器,如下如所示:

  注意;静态创建的轻拍手势识别器的这种方式也适合其他手势识别器的创建。由于静态创建方式都一样,所以在将其他手势识别IQ的创建时只讲动态 创建的方式。

  2> 动态创建,initWithTarget:action:方法的功能是创建初始化一个UITapGestureReconizer对象,其语法形式如下:

    -(id)initwithTarget:(id)target action:(SEL)action:;

    其中(id)target用来指定一个目的对象;(SEL)action用来指定动作。

  【示例 - 轻拍手势识别器】

2.2 捏

  所谓捏,就是使用两个手指自里向外张合从而实现图片的放大和缩小。UIPinchGestureRecognizer手势识别器可以识别捏的手势。要动态创建,就是使用initWith:action:方法创建初始化一个UIPinchGestureRecognizer手势识别器对象。

  【示例 - 捏手势识别器】

  注意:如果要在虚拟机上实现捏手势,就要按住Ctrl+Alt键,这是iOS模拟器上会出现两个小圆,它们就代表了两个手指。

2.3 滑动

  滑动的手势可以使用UISwipeGestureRecognizer手势识别器进行识别。

  【示例 - 滑动手势识别器】

2.4 旋转

  旋转的手势可以使用UIRotationGestureRecognizer手势识别器进行识别。

  【示例 - 旋转手势识别器】

2.5 移动

  移动的手势可以使用UIPanGestureRecognizer手势识别器进行识别。

  【示例 - 移动手势识别器】

2.6 长按

  长按的手势可以使用UILongPressGestureRecognizer手势识别器进行识别。

  【示例 - 长按手势识别器】

2.7 自定义手势

时间: 2024-10-29 02:57:50

触摸与手势的相关文章

JavaScript触摸与手势事件

处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 1.touchstart:  // 手指放到屏幕上的时候触发 2.touchmove:  // 手指在屏幕上移动的时候触发 3.touchend:  // 手指从屏幕上拿起的时候触发 4touchcancel:  // 系统取消touch事件的时候触发.至于系统什么时候会取消,不详 属性 1.client / clientY:// 触摸点相对于浏览器窗口viewport的位置 2.pageX / pageY:

触摸、手势

触摸: 1.创建一个视图,重写TA在不同阶段的触发的方法,方法如下: 2.当重写触碰移动方法,想要实现一个视图随着自己的鼠标移动的方法时 获取触摸在屏幕上的手指对象: UITouch *tou = [touches anyObject]; (1)要获取手指移动之前的位置 之前的位置 = [tou previousLocationInView:self] (2)要获取手指移动之后的位置 之后的位置 = [tou locationInView]; (3)视图现在的位置的X值就是: 自己原来的位置 +

触摸,手势

- (void)viewDidLoad {    [super viewDidLoad];        UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 275, 500)] autorelease];    imageView.image = [UIImage imageNamed:@"love.jpg"];    imageView.userInteractionEnab

IOS 触摸与手势

触摸 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIView??????不接受触摸时间的三种情况?????????????????? •  ????不接受用户交互????????????userInteractionEnable = NO;??

Android 触摸及手势操作GestureDetector

转自:http://blog.csdn.net/xyz_lmn/article/details/16826669 现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘.无鼠标的手机系统带来了很多的便利.当用户触摸屏幕时会产生很多的触摸事件,down.up.move等等.View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,如下

javaScript事件(九)事件类型之触摸与手势事件

一.触摸事件 touchstart:当手指触摸屏幕时触发:即使已经有一个手指放在了屏幕上也会触发. touchmove:当手指在屏幕上滑动时连续地触发.在这个世界发生期间,调用preventDefault()可以阻止滚动. touchend:当手指在屏幕上移开时触发. touchcancel:当系统停止跟踪触摸时触发.关于此事件的确切触发时间,文档中没有明确说明. 上面这几个事件都会冒泡,也都可以取消.虽然这些触摸事件没有在DOM规范中定义,但它们却是以兼容DOM的方式实现的.因此,每个触摸事件

IOS 手势-轻点、触摸、手势

1.概念 手势是从你用一个或多个手指接触屏幕时开始,直到手指离开屏幕为止所发生的所有事件.无论手势持续多长时间,只要一个或多个手指仍在屏幕上,这个手势就存在. 触摸是指把手指放到IOS设备的屏幕上,从屏幕上拖动或抬起的这样一种行为.手势中涉及的触摸数量等于同时位于屏幕上的手指数量. 手势识别器是一个对象,它知道如何观察用户生成的事件流,并能够识别用户何时以与预定义的手势相匹配的方式进行了触摸和拖动.在检测常见手势时,UIGestureRecognizer类及其各种子类可节省大量工作.UIGest

swift 触摸与手势

class MyView: UIView { var lView:UIView! var time:NSTimer! override init(frame: CGRect) { super.init(frame: frame) //开启多点触控 self.multipleTouchEnabled = true lView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50)); lView.backgroundColor = UIC

触摸、手势与响应者链条

1>4个触摸事件[触摸事件主要是针对视图] - ( void )touchesBegan:( NSSet *)touches withEvent:( UIEvent *)event; - ( void )touchesMoved:( NSSet *)touches withEvent:( UIEvent *)event; - ( void )touchesEnded:( NSSet *)touches withEvent:( UIEvent *)event; - ( void )touchesC