iOS 手势大全
//系统自动调用
//一个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];
事件产生和传递的过程:
当发生触摸事件的时候,先传递给UIApplication,以队列结构接收事件。传递给主窗口,主窗口传递给控制器的UIView,遍历UIView的子视图,寻找最合适的UIView来接收。
响应者链:
该类的上一级如果是UIView,子视图处理事件,如果处理不了,找他的父视图。
该类的上一级如果是UIViewController,则是由所属的控制器来处理。
//返回最合适的UIView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {}
//判断当前的点在不在View上
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return YES;
}
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;
}
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];
[self.imageView addGestureRecognizer:longGesture];
(3)轻扫手势 Swipe
UISwipeGestureRecognizer * swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
//设置轻扫方向
swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft;
[self.imageView addGestureRecognizer:swipeGesture];
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];
}
iOS 手势大全的更多相关文章
- 墙裂推荐 iOS 资源大全
这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...
- iOS 资源大全整理
这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...
- ios手势
iOS 手势操作:拖动.捏合.旋转.点按.长按.轻扫.自定义 大 中 小 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. i ...
- iOS手势学习UIGestureRecognizer & cocos2d 手势推荐
iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer // 长按UIPanGestur ...
- iOS手势处理
iOS手势处理 iOS手势有着如下几种: UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UIS ...
- iOS github大全 & iOS7的学习blog
iOS github大全 :有600多个iOS各方面的开源库,并分类了 一天天学习iOS7 :每天学习一点iOS7的新特性
- iOS 手势识别器概述
手势识别器 iOS 手势识别器(UIGestureRecognizer) 点击手势(UITapGestureRecognizer) 滑动手势(UISwipeGestureRecognizer) 旋转手 ...
- swift 实现iOS手势密码、指纹密码、faceID
本博客包含了如何实现iOS手势密码.指纹密码.faceID全步骤,包括了完整的代码. 先附上demo地址https://github.com/Liuyubao/LYBTouchID,支持swift3. ...
- iOS手势解锁、指纹解锁--Swift代码
一.手势密码 1. 1.1.用UIButton组成手势的节点. 1.2.当手指接触屏幕时,调用重写的 touchesBegan:withEvent方法(在touchesBegan里调用setNeeds ...
随机推荐
- 2013年度Python Git工具
Pycoders周刊根据读者对周刊文章的点击数据,评选出了2013年最受关注的和Git相关的Python工具. git-workflow (github.com) 可视化你的 git 工作流程的工具, ...
- Codeforces 660 C. Hard Process (尺取)
题目链接:http://codeforces.com/problemset/problem/660/C 尺取法 #include <bits/stdc++.h> using namespa ...
- HDU4289Control(最大流)
看了这道题,然后重新开始练习自己的刚敲不久的网络流,发现还是难以一遍敲得完整啊,,,,, 调了...遍,改了...遍,测了...遍,交了,,,遍,总算是A了,,不简单啊 然后试着用了其他两种算法EK和 ...
- 2013-2014集训之DP
第一周: 经过漫长的时间,终于有时间来写一下结题报告. 地址http://acm.hust.edu.cn/vjudge/contest/view.action?cid=36180#overview A ...
- UVaLive 6693 Flow Game (计算几何,线段相交)
题意:给个棋盘,你可以在棋盘的边缘处放2个蓝色棋子2个黄色棋子,问连接2组同色棋子的最小代价,如果线路交叉,输-1. 析:交叉么,可以把它们看成是两条线段,然后如果相交就是不行的,但是有几种特殊情况, ...
- HDU 5074 Luck Competition (暴力,概率)
题意:有 n 个人参加比赛,给出n-1个人的成绩,然后要选出一个幸运的人,先把所有的分数求平均数,然后再*2/3,那个不大于这个数,且最接近的数,就是最幸运的, 让你设置最后一个人的分,使他是最幸运的 ...
- gb2312和UTF-8的区别
GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字.当然还有其他的 ...
- yii缓存设置使用
'filecache'=>array( 'class'=>'system.caching.CFileCache', 'directoryLevel'=>'3',), //在main. ...
- spring与jpa整合 简化persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库
===========appliction.xml配置文件======================= <?xml version="1.0" encoding=" ...
- sqlserver 自增字段修改为普通主键字段
--增加备份字段alter Table tableName add columnNameBak bigint ; --将主键自增字段 赋值到备份字段update tableNameset column ...