因为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的应用的更多相关文章

  1. 触摸事件UITouch的用法

    触摸屏幕是iOS设备接受用户输入的主要方式,包括单击.双击.拨动以及多点触摸等,这些操作都会产生触摸事件. 在Cocoa中,代表触摸对象的类是UITouch.当用户触摸屏幕后,就会产生相应的事件,所有 ...

  2. iOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别

    触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponde ...

  3. UITouch触摸事件

    UITouch触摸事件 主要为三个方法 1.-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{2.3. UITouch * ...

  4. 触摸事件,手势识别(UITouch,UIGestureRecognizer)

    触摸发生时,UIWindow会有一个队列来存放所有的触摸事件,然后再把这些事件发送给对应的hit-test view,hit-test view会通过touch的四个函数来接收这些事件. 四个函数分别 ...

  5. iOS 触摸事件与UIResponder(内容根据iOS编程编写)

    触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1.  一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...

  6. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  7. iOS中响应者链条-触摸事件

    总体来说,分2个步骤: 一,从上到下寻找合适的控件来处理这个触摸事件.如下图,如果点击了黄色4,则UIApplication -> UIWindow -> 1白色 -> 2橙色 -& ...

  8. iOS触摸事件

    触摸常见的事件有以下几种,触摸事件一般写在view文件中,因为viewController文件有可能控制不止一个view,不适合写触摸事件 // 开始触摸 - (void)touchesBegan:( ...

  9. iOS中的触摸事件和手势处理

    iOS中的事件可以分为三大类: 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并 ...

随机推荐

  1. key Value

    key 存值的编号 value 存放的数据 看来key 和value 可以为null~   public class Dog { private int id; private String name ...

  2. leetcode 相交链表 python实现

    这道题 要想解决其实不难, 开两层循环进行遍历就能实现,但是会超时 如果想要O(n) 的时间复杂度, 我考虑用哈希表来存储遍历过的元素,如果发现当前遍历的元素在哈希表里,那说明交叉点就在这 这里利用了 ...

  3. type="submit"表单提交理解

    1.默认为form提交表单 . button则响应用户自定义的事件,如果不指定onclick等事件处理函数,它是不做任何事情.当然,button也可以完成表单提交的工作. 2.method=" ...

  4. 【20181103T1】地球发动机【dp优化】

    题面 一眼dp 设\(f_i\)表示前\(i\)个且\(i\)必须选的最大功率 有 \(f _i= max_{1 \leq j < i,A_i - A_j > X_j} \{f_j \}+ ...

  5. 【转载】VC操作剪切板

    1.在剪切板上放置数据 if(OpenClipboard())    //打开剪切板{    EmptyClipboard(); //清空剪切板    CString str;       //从控件 ...

  6. Uva 12889 One-Two-Three

      Your little brother has just learnt to write one, two and three, in English. He has written a lot ...

  7. Codeforces Round #234 (Div. 2) A. Inna and Choose Options 模拟题

    A. Inna and Choose Options time limit per test 1 second memory limit per test 256 megabytes input st ...

  8. [Visual Studio] .vsix项目模板制作

    Visual Studio (VSIX,项目模板 )制作   下载Vsiual Studio 2012 SDK 下载地址:http://www.microsoft.com/en-us/download ...

  9. Git_忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里 ...

  10. 小程序获取openid unionid session_key

    .wxml <button bindtap="paytap">授权</button> .js Page({ paytap: function () { va ...