iOS 手势大全

1、Touch事件

//系统自动调用

//一个UITouch代表一根手指 按住option变成两根手指

//虽然是两个手指,但只执行一次触摸事件

- (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 {} 取消触摸手势

//获取任意手指

UITouch * touch = [touches anyObject];

//手指触摸的View

NSLog(@"touch.view:%@",touch.view);

//点击次数

NSLog(@"点击次数:%ld",touch.tapCount);

//当前手指的位置

CGPoint currentPonit = [touch locationInView:touch.view];

//上一次手指所处的位置

CGPoint previousPonit = [touch previousLocationInView:touch.view];

2、事件分发

事件产生和传递的过程:

当发生触摸事件的时候,先传递给UIApplication,以队列结构接收事件。传递给主窗口,主窗口传递给控制器的UIView,遍历UIView的子视图,寻找最合适的UIView来接收。

响应者链:

该类的上一级如果是UIView,子视图处理事件,如果处理不了,找他的父视图。

该类的上一级如果是UIViewController,则是由所属的控制器来处理。

//返回最合适的UIView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {}

//判断当前的点在不在View上

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {

return YES;

}

3、UIImageView点击事件

self.imageView.userInteractionEnabled = NO;

//无法响应事件的3种情况:

//1、当userInteractionEnabled未开启

//2、当hidden属性为YES

//3、当alpha属性为0时

//将以YellowView为坐标系的点,转化为以button为坐标系的点 self = yellowView

CGPoint buttonPoint = [self convertPoint:point toView:self.button];

这个函数的用处是判断当前的点击或者触摸事件的点是否在当前的view中。

它被hitTest:withEvent:调用,

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;   // default returns YES if point is in bounds

4、手机摇一摇

//事件的种类

- (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event {

if (motion == UIEventSubtypeMotionShake) {

NSLog(@"摇一摇");

}

}

5、**Gesture手势

UIGestureRecognizerState:

开始: UIGestureRecognizerStateBegan

改变: UIGestureRecognizerStateChanged

结束: UIGestureRecognizerStateEnded

取消: UIGestureRecognizerStateCancelled

失败: UIGestureRecognizerStateFailed,

//同时使用两个手势 捏合 旋转

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

return YES;

}

(1)点击手势 Tap

UITapGestureRecognizer * tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction1:)];

//点击一次便触发

tap1.numberOfTapsRequired = 1;

[self.imageView addGestureRecognizer:tap1];

UITapGestureRecognizer * tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction2:)];

//双击一次便触发

tap2.numberOfTapsRequired = 2;

[self.imageView addGestureRecognizer:tap2];

//如果tap2成功执行,让tap1失败

[tap1 requireGestureRecognizerToFail:tap2];

(2)长按手势 LongPress

UILongPressGestureRecognizer * longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longAction:)];

[self.imageView addGestureRecognizer:longGesture];

(3)轻扫手势  Swipe

UISwipeGestureRecognizer * swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];

//设置轻扫方向

swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft;

[self.imageView addGestureRecognizer:swipeGesture];

(4)捏合事件 Pinch

UIPinchGestureRecognizer * pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];

pinchGesture.delegate = self;

[self.imageView addGestureRecognizer:pinchGesture];

self.pin = pinchGesture;

//对应事件

- (void)pinchAction:(UIPinchGestureRecognizer *)pin {

self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pin.scale, pin.scale);

//复位

pin.scale = 1;

}

(5)旋转事件 Rotation

UIRotationGestureRecognizer * rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];

rotationGesture.delegate = self;

[self.imageView addGestureRecognizer:rotationGesture];

//对应事件

- (void)rotationAction:(UIRotationGestureRecognizer *)rotation {

self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotation.rotation);

//复位

rotation.rotation = 0;

}

(6)拖动手势 Pan

UIPanGestureRecognizer * panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];

[self.imageView addGestureRecognizer:panGesture];

//对应事件

- (void)panAction:(UIPanGestureRecognizer *)pan {

//获取拖动的偏移量

CGPoint ponit = [pan translationInView:self.view];

self.imageView.center = CGPointMake(self.imageView.center.x + ponit.x, self.imageView.center.y + ponit.y);

//复位

[pan setTranslation:CGPointZero inView:self.imageView];

}

时间: 2024-09-30 07:30:07

iOS 手势大全的相关文章

iOS手势学习UIGestureRecognizer & cocos2d 手势推荐

iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按UIPanGestureRecognizer  // 慢速拖动UIPinchGestureRecognizer  // 两指向內或向外拨动UIRotationGestureRecognizer   // 旋转UISwipeGestureRecognizer   // 快速滑动UITapGestureRecognizer   //

iOS手势 规避同一界面上不同子界面同时响应多个手势

最近在项目中遇到这样一个有关iOS手势的问题,首先需求描述如下:“在一个CollectionView中,要求长按不同的cell,产生一个cell的snapshot,此时可拖拽这个snapshot再进行后续的操作(如拖到view的某个位置出发一个事件)”.需求本身并不复杂,但要求每次只能有一个cell响应长按手势,不允许同时有两个或以上的cell响应长按手势. 我们知道UIGestureRecognizer有很多回调和方法可以兼容同一个View上的多种手势,网上相关的教程也很多,比如: http:

iOS手势UIGestureRecognizer

UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有6个子类处理具体的手势: 1.UITapGestureRecognizer (任意手指任意次数的点击) // 点击次数 numberOfTapsRequired // 手指个数 numberOfTouchesRequired [plain] view plaincopy UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer a

iOS手势UIGestureRecognizer识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) (转)

1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类.手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别. UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecog

iOS 手势识别器概述

手势识别器 iOS 手势识别器(UIGestureRecognizer) 点击手势(UITapGestureRecognizer) 滑动手势(UISwipeGestureRecognizer) 旋转手势(UIRotationGestureRecognizer) 捏合手势( UIPinchGestureRecognizer) 长按手势( UILongPressGestureRecognizer) 平移手势( UIPanGestureRecognizer) 屏幕边缘平移手势(UIScreenEdge

iOS手势处理

iOS手势处理 iOS手势有着如下几种: UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UISwipeGestureRecognizer UIPanGestureRecognizer UILongPressGestureRecognizer 上面的手势对应的操作是: Tap          (点一下) Pinch        (二指往內或往外拨动,平时经常用到的缩放)  矩阵变换 Rot

iOS手势识别器

UIGestureRecognizer UIGestureRecognizer类,用于检测.识别用户使用设备时所用的手势.它是一个抽象类,定义了所有手势的基本行为.以下是UIGestureRecognizer子类,用于处理具体的用户手势行为: UITapGestureRecognizer // 1.单击 UILongPressGestureRecognizer // 3.长按 UISwipeGestureRecognizer // 4.轻扫 UIPanGestureRecognizer // 5

iOS 手势及触摸

转自:http://justsee.iteye.com/blog/1885538 一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类, 响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事 件发生的视图,也就是用户触摸屏幕的地方.事件将沿着响

iOS手势操作,拖动,轻击,捏合,旋转,长按,自定义(http://www.cnblogs.com/huangjianwu/p/4675648.html)

1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotationGestureRecognizer(旋转) UITapGestureRecognizer(点按) UILo