【iOS系列】-触摸事件与手势识别
【iOS系列】-触摸事件与手势识别
第一:触摸事件
一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象
UIEvent:称为事件对象,记录事件产生的时刻和类型
两根手指同时触摸一个view,那么view只会调用一次touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象;两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象;所以可以根据touches中UITouch的个数可以判断出是单点触摸还是多点触摸
我们可以touch时间来监听view的点击
属性
(CGPoint)locationInView:(UIView *)view;
返回值表示触摸在view上的位置
这里返回的位置是针对view的坐标系的(以view的左上角为原点(0, 0))(CGPoint)previousLocationInView:(UIView *)view;
该方法记录了前一个触摸点的位置
常用方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
//注 由于touches是NSSet,无须集合,因此我们可以利用下面的方法来获得UITouch对象以及相关触摸的位置坐标
UITouch *touch = [touches anyObject];
//当前触摸点
CGPoint current = [touch locationInView:self];
//上一个触摸点
CGPoint previous = [touch previousLocationInView:self];
UIView不接收触摸事件的三种情况
1,userInteractionEnabled = NO
2,hidden = YES
3,alpha = 0.0 ~ 0.01
注:UIImageView的userInteractionEnabled默认就是NO.
第二:手势识别器:UIGestureRecognizer
UIGestureRecognizer,能轻识别用户在某个view上面做的一些常见手势,但是UIGestureRecognizer是一个抽象类,使用它的子类才能处理具体的手势
//常见子类
UITapGestureRecognizer(敲击)
UIPinchGestureRecognizer(捏合,用于缩放)
UIPanGestureRecognizer(拖拽)
UISwipeGestureRecognizer(轻扫)
UIRotationGestureRecognizer(旋转)
UILongPressGestureRecognizer(长按)
手势识别器的相关状态
UIGestureRecognizerStateBegan,// 一个手势已经开始但尚未改变或者完成时
UIGestureRecognizerStateChanged,// 手势状态改变
UIGestureRecognizerStateEnded,// 手势完成
使用
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapView)];
tap.delegate = self;//不设置代理也可以监听/执行监听方法,但是默认是不能进行多手势识别,或者我们想实现代理方法的时候,就要设置代理
[self.iconView addGestureRecognizer:tap];
//手势进行缩放的注意点:
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
pinch.delegate = self;
[self.iconView addGestureRecognizer:pinch];
- (void)pinchView:(UIPinchGestureRecognizer *)pinch
{
pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
pinch.scale = 1; // 由于每次进行缩放的时候都是相对于初始位置,因此我们每次缩放后把缩放比设为1,也就是让下一次缩放相对于想在的位置
}
//手势进行旋转的注意点:
UIRotationGestureRecognizer *recognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateView:)];
recognizer.delegate = self;
[self.iconView addGestureRecognizer:recognizer];
- (void)rotateView:(UIRotationGestureRecognizer *)rotate
{
rotate.view.transform = CGAffineTransformRotate(rotate.view.transform, rotate.rotation);
recognizer.rotation = 0; //由于每次进行旋转的时候都是相对于初始位置,因此我们每次缩放后把旋转角度比设为0,也就是让下一次缩放相对于想在的位置
}
//拖拽,移动
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
[self.purpleView addGestureRecognizer:pan];
- (void)panView:(UIPanGestureRecognizer *)pan
{
// 1.在view上面挪动的距离
CGPoint translation = [pan translationInView:pan.view];
CGPoint center = pan.view.center;
center.x += translation.x;
center.y += translation.y;
pan.view.center = center;
// 2.清空移动的距离
[pan setTranslation:CGPointZero inView:pan.view];//同上,每次移动后我们要进行清零操作
}
【iOS系列】-触摸事件与手势识别的更多相关文章
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- 转发:iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 转载来自崔江涛(KenshinCui) 链接:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一 ...
- iOS:触摸事件和手势识别的介绍
触摸事件和手势识别的介绍 1.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动事件 远程控制事件 iOS中许多事件对象都是UIEvent类的实例,UIEvent记录了事件所产生 ...
- iOS基础 - 触摸事件与手势识别
一.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动(加速计)事件 远程控制事件 二.UIEvent iOS中许多事件对象都是UIEvent类的实例,记录事件产生的时刻和类型 U ...
- IOS触摸事件和手势识别
IOS触摸事件和手势识别 目录 概述 触摸事件 手势识别 概述 为了实现一些新的需求,我们常常需要给IOS添加触摸事件和手势识别 触摸事件 触摸事件的四种方法 -(void)touchesBegan: ...
- iOS中—触摸事件详解及使用
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...
- 触摸事件,手势识别(UITouch,UIGestureRecognizer)
触摸发生时,UIWindow会有一个队列来存放所有的触摸事件,然后再把这些事件发送给对应的hit-test view,hit-test view会通过touch的四个函数来接收这些事件. 四个函数分别 ...
- iOS基础 - 触摸事件&手势识别
================================================================== 一.触摸事件&手势识别 1> 4个触摸事件,针对视图 ...
- iOS中的触摸事件,手势识别,摇晃事件等
在iOS中,事件可以划分为以下几类: 1.触摸事件:通过触摸,手势进行触发(手指点击.缩放等) 2.运动事件:通过加速器触发(例如手机晃动) 3.远程控制事件:通过其他远程设备触发(例如耳机控制按钮) ...
随机推荐
- 1.INFORMATION_SCHEMA简介
1. INFORMATION_SCHEMA简介 INFORMATION_SCHEMA提供对数据库元数据的访问,有关MySQL服务器信息,例如数据库或表的名称,列的数据类型或访问权限. INFORMAT ...
- bash实现自动补全
yum install -y bash-completion source /usr/share/bash-completion/bash_completion 执行后yum拥有选项自动补全功能 对于 ...
- perl学习之:use and require
本文和大家重点学习一下Perl use和require用法对比,这两个函数都是一个意思,加载和引用Perl的模块,或者是子程序,区别在于Perl use是在当前默认的里面去寻找,一旦模块不在指定的区域 ...
- Wall Treatment
* wall treatment You can combine the turbulent flow interfaces with different types of wall treatmen ...
- Android获取屏幕大小(Px)
private DisplayMetrics dm = new DisplayMetrics(); TextView tv; Button bu; @Override protected void o ...
- tarjan 学习记
1.强连通分量是什么 强连通分量指的是部分点的集合如果能够互相到达(例如 1→3,3→2,2→1(有向图)这种,132每个点都能互相抵达) 或者说,有一个环,环上点的集合就是一个强连通分量 2.那怎么 ...
- hdu3376 Matrix Again
最大费用最大流 咋写?取个相反数就可以了-- #include <iostream> #include <cstring> #include <cstdio> #i ...
- 71.mybatis 如何获取插入的id【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 在之前的文章已经讲过spring boot集成mybatis了,但是忘记说一个很重要的知识点了,那就是获取获取主键id,这篇文章补充下,sprin ...
- 服务器架构及实战(架构篇)- PHP建站
概述 详解 PHP的环境搭建 PHP的帮助使用和配置文件 PHP的Hello World PHP的库函数调用 PHP的Web程序 PHP的函数和面向对象使用 PHP的数据库访问 Nginx安装和配置访 ...
- 复(学)习化学时突然的一个 idea
期中考试成功探底...但是某些化学问题还是很有信息学价值的... n 烷同分异构体计数. 这个题 fanhq666 出过,就是一个 dp. 设 f[i] 表示含有 i 个节点的无标号不同构的度数限制为 ...