触摸事件UITouch的应用
因为UIView或者UIViewController都是继承与UIResponder ,所以都有UITouch这个事件。当用户点击屏幕的时候,会产生触摸事件。
通过UITouch事件,可以监听到开始触摸、触摸移动过程、触摸结束以及触摸打断四个不同阶段的状态,在这些方法中,我们能够获取到很多有用的信息,比如触摸点的坐标、触摸的手指数、触摸的次数等等,下面通过一个小例子来说明一下。

详细代码如下:
/*
定义属性
*/
@interface ViewController ()
{
CGPoint _startPoint; //开始点击的点
CGPoint _endPoint; //结束点击的点 UILabel *_label1; //显示当前触摸的状态的标签
UILabel *_label2;
UILabel *_label3;
UILabel *_label4;
UIImageView *_imageView; //笑脸图片
} /*
触摸事件UITouch的系列方法如下所示 <一>到<四>
*/ #pragma mark <一> 当一个或多个手指触碰屏幕时,发送touchesBegan:withEvent:消息
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
_label1.text = @"触摸 开始 "; //1. 首先获取触摸屏幕的手指
UITouch * touch = [touches anyObject]; //2. 点击的当前点的坐标
CGPoint point = [touch locationInView:self.view];
_label2.text = [NSString stringWithFormat:@"当前点得坐标:x=%.1f, y=%.1f",point.x,point.y]; //4. 获取触摸屏幕的次数
int tapCount = touch.tapCount;
//5. 获取触摸屏幕的手指根数
int fingerCount = touches.count; _label3.text = [NSString stringWithFormat:@"触摸屏幕次数为%i, 触摸的手指数为%i",tapCount,fingerCount]; //6. 当前视图默认只支持单点触摸 如果想添加多点触摸 必须开启多点触摸模式
self.view.multipleTouchEnabled = YES; //7.1. 得到开始点击的点,得到最后点击的点,计算一下,看看做了什么操作
_startPoint = [touch locationInView:self.view];
_label4.text = @"";
} #pragma mark <二> 当一个或多个手指在屏幕上移动时,发送touchesMoved:withEvent:消息
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
_label1.text = @"触摸 move...";
CGPoint point = [[touches anyObject] locationInView:self.view];
_label2.text = [NSString stringWithFormat:@"当前点得坐标:x=%.1f, y=%.1f",point.x,point.y];
} #pragma mark <三> 当一个或多个手指离开屏幕时,发送touchesEnded:withEvent:消息
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
_label1.text = @"触摸 结束";
CGPoint point = [[touches anyObject] locationInView:self.view]; //3. 判断是否进入了图片范围内
if (CGRectContainsPoint(_imageView.frame, point)) {
_label2.text = @"停留在笑脸图片范围内";
}
else
{
_label2.text = @"停留在笑脸图片外面";
} //7.2 计算开始到结束偏移量
float distanceX = fabsf(point.x - _startPoint.x);
//获取手指纵向移动的偏移量
float distanceY = fabsf(point.y - _startPoint.y); _label4.text = [NSString stringWithFormat:@"x偏移了%.1f,y方向偏移了%.1f",distanceX,distanceY]; _startPoint = CGPointZero;
} #pragma mark <四> 当触摸序列被诸如电话呼入这样的系统事件打断所意外取消时,发送touchesCancelled:withEvent:消息-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
_label1.text = @"触摸 取消";
}
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
触摸事件UITouch的应用的更多相关文章
- 触摸事件UITouch的用法
触摸屏幕是iOS设备接受用户输入的主要方式,包括单击.双击.拨动以及多点触摸等,这些操作都会产生触摸事件. 在Cocoa中,代表触摸对象的类是UITouch.当用户触摸屏幕后,就会产生相应的事件,所有 ...
- iOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponde ...
- UITouch触摸事件
UITouch触摸事件 主要为三个方法 1.-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{2.3. UITouch * ...
- 触摸事件,手势识别(UITouch,UIGestureRecognizer)
触摸发生时,UIWindow会有一个队列来存放所有的触摸事件,然后再把这些事件发送给对应的hit-test view,hit-test view会通过touch的四个函数来接收这些事件. 四个函数分别 ...
- iOS 触摸事件与UIResponder(内容根据iOS编程编写)
触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1. 一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- iOS中响应者链条-触摸事件
总体来说,分2个步骤: 一,从上到下寻找合适的控件来处理这个触摸事件.如下图,如果点击了黄色4,则UIApplication -> UIWindow -> 1白色 -> 2橙色 -& ...
- iOS触摸事件
触摸常见的事件有以下几种,触摸事件一般写在view文件中,因为viewController文件有可能控制不止一个view,不适合写触摸事件 // 开始触摸 - (void)touchesBegan:( ...
- iOS中的触摸事件和手势处理
iOS中的事件可以分为三大类: 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并 ...
随机推荐
- 传递 hdu 5961 拓扑排序有无环~
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分 ...
- 回顾2014 Java发生的5件大事
回顾2014 Java发生的5件大事 1.2月1日:RedMonk分析师确认并宣布Java是最受欢迎和多样化的语言! 2014年,Java生态圈伴随着引擎的轰鸣起步,随着FOSDEM年会的Free J ...
- leetcode 奇偶链表 python
要求空间复杂度O(1) 那就只能用指针不断改链表的指针, 不能建立新的内存 时间复杂度O(1) 一遍遍历 不能嵌套循环 我的思想是: 1 如果链表元素数量小于等于2个,那就无法操作 2 能操作的情况下 ...
- [xsy3343]程序锁
题意:有两个序列,序列中数字$\in\{-1,0,1\}$ 有两个指针,初始时分别指向两个序列的开始位置,有一个初始为$0$的数$a$,重复以下过程直到两个指针都指向序列末尾后 如果一个指针指向末尾后 ...
- hdu 4540 dp
题意: 假设: 1.每一个时刻我们只能打一只地鼠,并且打完以后该时刻出现的所有地鼠都会立刻消失: 2.老鼠出现的位置在一条直线上,如果上一个时刻我们在x1位置打地鼠,下一个时刻我们在x2位置打地鼠,那 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第三周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第三周学习总结 教材学习内容总结 <Java软件结构与数据结构>第五章-队列 一.概述 1.队列是什么? 队 ...
- [Linux] Ubuntu 18 LTS netplan 网络配置
Ubuntu 18 LTS netplan 网络配置 今天装完 Ubuntu 18 LTS,配置网络时发现Ubuntu 18LTS ifupdown has been replaced by netp ...
- maven中跳过单元测试(转)
你可能想要配置 Maven 使其完全跳过单元测试. 可能你有一个很大的系统,单元测试需要花好多分钟来完成,而你不想在生成最终输出前等单元测试完成. 你可能正工作在一个遗留系统上面,这个系统有一系列的失 ...
- ISO 7816-4: Interindustry Commands for Interchange
5. Basic Organizations 5.1 Data structures5.2 Security architecture of the card 5.3 APDU message str ...