• 触摸事件基本都是发生在 viewController 中,首先触摸的对象是视图,而视图的类 UIView 继承了 UIRespnder 类,但是要对事件作出处理,还需要重写 UIResponder 类中定义的事件处理函数。根据不同的触摸状态,程序会调用相应的处理函数。

1、touch 的创建

// 获取任意一个触摸对象
UITouch *touch = [touches anyObject]; // 获取任意一个触摸对象
UITouch *touch = [[event allTouches] anyObject]; // 获取指定的 view 触摸对象
UITouch *touch = [[event touchesForView:myView] anyObject]; // 获取指定的 window 触摸对象
UITouch *touch = [[event touchesForWindow:self.view.window] anyObject];

2、touch 的设置

  • 在系统触摸事件处理方法中实现
// 设置接收多点触摸
/*
默认为 NO,即视图默认不接收多点触摸
*/
self.view.multipleTouchEnabled = YES;

3、touch 的获取

  • 在系统触摸事件处理方法中实现
// 获取触摸窗口
UIWindow *touchWindow = touch.window; // 获取触摸视图
UIView *touchView = touch.view; // 获取触摸手势
NSArray *touchGesture = touch.gestureRecognizers; // 获取触摸次数
NSUInteger tapCount = touch.tapCount; // 获取触摸时间
NSTimeInterval timestamp = touch.timestamp; // 获取触摸状态
/*
UITouchPhaseBegan, // whenever a finger touches the surface. 触摸开始
UITouchPhaseMoved, // whenever a finger moves on the surface. 接触点移动
UITouchPhaseStationary, // whenever a finger is touching the surface but hasn't moved
// since the previous event. 接触点无移动
UITouchPhaseEnded, // whenever a finger leaves the surface. 触摸结束
UITouchPhaseCancelled, // whenever a touch doesn't end but we need to stop tracking
// (e.g. putting device to face) 触摸取消
*/
UITouchPhase touchPhase = touch.phase; // 获取触摸位置 // 上次触摸点的位置
CGPoint lastPoint = [touch previousLocationInView:self.view]; // 当前触摸点的位置
CGPoint currentPoint = [touch locationInView:self.view]; // 获取触摸半径
CGFloat majorRadius = touch.majorRadius;
CGFloat majorRadiusTolerance = touch.majorRadiusTolerance;

4、系统触摸事件处理方法

  • 不用手动调用
// 触摸开始,重写 UIResponder 中定义的方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { } // 触摸移动,重写 UIResponder 中定义的方法
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { } // 触摸结束,重写 UIResponder 中定义的方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { } // 触摸取消,重写 UIResponder 中定义的方法
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { }

5、视图随触摸移动

// 触摸移动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { // 获取触摸对象
UITouch *touch = [touches anyObject];
UIView *tapView = touch.view; // 获取触摸点位置
CGPoint lastPoint = [touch previousLocationInView:self.view];
CGPoint currentPoint = [touch locationInView:self.view]; // 改变视图中心坐标
CGPoint tapViewCenter = tapView.center; tapViewCenter.x += currentPoint.x - lastPoint.x;
tapViewCenter.y += currentPoint.y - lastPoint.y; tapView.center = tapViewCenter;
}

6、单击/双击触摸

// 触摸结束
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; // 单击
if (touch.tapCount == 1) { // 响应单击触摸事件
[self performSelector:@selector(singleTapClick) withObject:nil afterDelay:0];
}
// 双击
else if (touch.tapCount == 2) { // 取消单击触摸响应事件
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTapClick) object:nil]; // 响应双击触摸事件
[self performSelector:@selector(doubleTapClick) withObject:nil afterDelay:0];
}
} // 单击触摸响应事件处理
- (void)singleTapClick { self.view.backgroundColor = [UIColor greenColor];
} // 双击触摸响应事件处理
- (void)doubleTapClick { self.view.backgroundColor = [UIColor orangeColor];
}

UITouch的更多相关文章

  1. 你真的了解UIEvent、UITouch吗?

    一:首先查看一下关于UIEvent的定义 //事件类型 typedef NS_ENUM(NSInteger, UIEventType) { UIEventTypeTouches, UIEventTyp ...

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

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

  3. iOS - UITouch

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITouch : NSObject @available(iOS 2.0, *) public class UIT ...

  4. UITouch的用法

    UITouch一般无法直接获取,是通过UIView的touchesBegan等函数获得. //这四个方法是UIResponder中得方法 // Generally, all responders wh ...

  5. 触摸事件UITouch的用法

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

  6. UITouch 触摸事件处理(实例)

    来源:http://www.open-open.com/lib/view/open1341882439838.html 1. UITouch 的主要方法: - (void)touchesBegan:( ...

  7. UITouch触摸事件

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

  8. UITouch附加

    框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKNode.h 概览 重要提示:这是一个初步的 ...

  9. UITouch - BNR

    本节任务:创建一个视图,让用户在视图上拖动手指来画线. UIView类能够重载4个方法来处理不同的触摸事件. - (void)touchesBegan:(NSSet *)touches withEve ...

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

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

随机推荐

  1. asp.net自动将页面中的所有空间置为不可用以及将所有文本框置空

    /// <summary> /// 遍历页面上所有控件 /// </summary> /// <param name="page">指定的Pag ...

  2. SQL Server获取TEXT字段的内容长度

    DATALENGTH 返回任何表达式所占用的字节数. 语法 DATALENGTH ( expression ) 参数 expression 任何类型的表达式. 返回类型 int 注释 DATALENG ...

  3. 机器学习:决策树(CART 、决策树中的超参数)

    老师:非参数学习的算法都容易产生过拟合: 一.决策树模型的创建方式.时间复杂度 1)创建方式 决策树算法 既可以解决分类问题,又可以解决回归问题: CART 创建决策树的方式:根据某一维度 d 和某一 ...

  4. Servlet3.0之八:基于Servlet3.0的文件上传@MultipartConfig

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  5. Striker-一款功能较多的web渗透工具

    项目地址:https://github.com/UltimateHackers/Striker 首先下载项目,并打开 ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clo ...

  6. Python命令模块argparse学习笔记(一)

    首先是关于-h/--help参数的设置 description:位于help信息前,可用于描述helpprog:描述help信息中程序的名称epilog:位于help信息后usage:描述程序的用途a ...

  7. spring 框架整合

    struts hibernate spring 先贴出框架整合需要的maven <project xmlns="http://maven.apache.org/POM/4.0.0&qu ...

  8. 如何使32位Linux支持4G以上内存

    问题 Linux无法支持超过4G的内存,笔者使用的Linux是CentOS 5,机器是DELL PE1950服务器.    原因: X86系统默认寻址能力的限制    解决办法: 安装具有PAE(物理 ...

  9. Android 4学习(1):学习路线图

    学习路线图 如下图所示,整个Android的架构可以分为四层,五个部分.我给自己制定的学习路线图是这样的: 对于有java基础的入门级android开发者而言,首先要学会使用Application F ...

  10. Oracle——判断对象是否存在(未完工)

    一.系统表: 1.User_Tables:存储用户下的所有表的信息: 2.dba_tables:存储管理员权限下的所有表的信息: 3.all_tables:存储所有表的信息. 4.all_Tab_Co ...