UI基础:事件.响应链 分类: iOS学习-UI 2015-07-03 19:51 1人阅读 评论(0) 收藏

时间:2021-10-05 22:22:38

UIEvent:事件,是由硬件捕捉的一个代表用户操作操作设备的对象.

事件分三类:触摸事件.晃动事件.远程控制事件.

触摸事件:用户通过触摸设备屏幕操作对象,.输入数据.支持多点触摸,包含1个到多个触摸点.

UIView支持触摸事件(继承了UIResponder),而且支持多点触摸

使用时,需要定义UIView子类,重写触摸相关的方法.

1.刚开始触摸到屏幕的时候触发

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
}

2.触摸事件被意外中断的时候触发(如:来电)

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
}

3.当手指离开屏幕的时候触发

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
}

4.当手指在视图上移动的时候触发

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

}

UITouch 点击类

touchs 存放手指对象

如:

1.当单击时
UITouch *touch=[touches anyObject];
//获取手指对象的数组
2.但双击时
NSArray *allTouch=[touches allObjects];
//获取手指对象
UITouch *touch1=[allTouch firstObject];
UITouch *touch2=[allTouch lastObject];

手势:有规律的触摸

UITouch代表触摸在屏幕上的一根手指,可以获取触摸时间和触摸位置.

获取touch对象:touches集合中包含了视图上的所有手势.


响应者链

有多个响应者对象组成的链.

UIResponder 响应者类

iOS中所有能响应事件(触摸.晃动.远程事件)的对象都是响应者.

系统定义了一个抽象的父类UIResponder来表示响应者.其子类都是响应者.

检测触碰视图

硬件检测到触摸操作,会将信息交给UIApplication,开始检测.

检测过程:

UIApplication -> window ->viewController ->view ->检测所有子视图

处理触摸事件:

事件处理的顺序与触摸检测查询相反.(自己的用户交互关闭,就交给父类处理)

触摸的子视图 -> view -> viewController ->window ->UIApplication

阻断响应者链

响应者链可以被打断.无法完成检测查询过程.

视图类的属性:userInteractionEnabled 关闭后可以阻断查询过程

__其中,下面是在事件里面几个简单程序的主要代码段

1.实现点击屏幕一次换颜色.点击两次换父视图的颜色

//当手指离开屏幕的时候触发
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"%s",__FUNCTION__);
// UITouch 点击类
// touchs 存放手指对象
UITouch *touch=[touches anyObject];
if (1==touch.tapCount) {
// 当视图识别为单击,延迟执行之下的方法,看是否会有再次点击
[self performSelector:@selector(changeMyselfBackGroundColor) withObject:nil afterDelay:0.3];
// self.backgroundColor=[UIColor randomColor]; }else if(2==touch.tapCount){
// 当识别为双击的时候,取消之前的操作
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(changeMyselfBackGroundColor) object:nil];
self.superview.backgroundColor=[UIColor randomColor];
} } -(void)changeMyselfBackGroundColor{
self.backgroundColor=[UIColor randomColor];
}

其中,对UIcolor进行了类目,使其有个随机颜色的功能

@implementation UIColor (Random)
+(UIColor *)randomColor{
return [UIColor colorWithRed:COLORVALUE green:COLORVALUE blue:COLORVALUE alpha:1.0]; }
@end

2.实现缩放视图的功能

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    if (1==touches.count) {
return;
}else{ // 获取手指对象的数组
NSArray *allTouch=[touches allObjects];
//获取手指对象
UITouch *touch1=[allTouch firstObject];
UITouch *touch2=[allTouch lastObject];
// 获取两个手指的当前位置
CGPoint currenFirstPoint=[touch1 locationInView:self];
CGPoint currenSecondPoint=[touch2 locationInView:self];
// 获得两个手指当前的距离
CGFloat currentDistance=[self distanFromPoint:currenFirstPoint toPoint:currenSecondPoint];
// 获取之前两手指的位置
CGPoint previousFirstPoint=[touch1 previousLocationInView:self];
CGPoint previousSecondPoint=[touch2 previousLocationInView:self];
// 获取之前两手指之间的距离
CGFloat currentsDistance=[self distanFromPoint:previousFirstPoint toPoint:previousSecondPoint];
// 获取比例
CGFloat rate=currentDistance/currentsDistance;
// 缩放视图,中心点不变,修改bounds即可
self.bounds=CGRectMake(0, 0, self.frame.size.width*rate, self.frame.size.height*rate); } }
//封装计算两点之间的距离的方法
-(CGFloat)distanFromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint{
CGFloat dx=fromPoint.x-toPoint.x;
CGFloat dy=fromPoint.y-toPoint.y;
return sqrt(dx*dx+dy*dy);
}

3.实现视图随着手指移动

@implementation MoveView

//触摸的方法没必要完全实现
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ //先获取手指对象
UITouch *touch=[touches anyObject];
// 获取自身视图手指当前的手指位置
CGPoint currenPoint=[touch locationInView:self];
// 获取手指之前的位置
CGPoint perviousPoint=[touch previousLocationInView:self];
// 计算移动的增量
CGFloat dx=currenPoint.x-perviousPoint.x;
CGFloat dy=currenPoint.y-perviousPoint.y; CGPoint center=self.center;
self.center=CGPointMake(center.x+dx, center.y+dy); }
@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

UI基础:事件.响应链 分类: iOS学习-UI 2015-07-03 19:51 1人阅读 评论(0) 收藏的更多相关文章

  1. linux常用的压缩与解压缩命令 分类: 学习笔记 linux ubuntu 2015-07-05 19:38 38人阅读 评论(0) 收藏

    1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...

  2. shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏

    最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...

  3. Shell脚本编程入门(一) 分类: 学习笔记 linux ubuntu 2015-07-09 21:06 29人阅读 评论(0) 收藏

    最近在学shell,记录一下. if语句的使用: 1.判断两个参数大小 #!/bin/sh #a test about if statement a=10 b=20 if [ $a -eq $b ]; ...

  4. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  5. ubuntu14&period;04使用root用户登录桌面 分类: 学习笔记 linux ubuntu 2015-07-05 10&colon;30 199人阅读 评论&lpar;0&rpar; 收藏

    ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...

  6. linux中echo的用法 分类: 学习笔记 linux ubuntu 2015-07-14 14&colon;27 21人阅读 评论&lpar;0&rpar; 收藏

    1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \ ...

  7. shell脚本调试 分类: 学习笔记 linux ubuntu 2015-07-14 12&colon;49 53人阅读 评论&lpar;0&rpar; 收藏

    1.sh -x script 这将执行脚本并显示所有变量的值 如,脚本: #!/bin/bash #a test about shift if [ $# -le 0 ] then echo &quot ...

  8. shell入门之流程控制语句 分类: 学习笔记 linux ubuntu 2015-07-10 16&colon;38 89人阅读 评论&lpar;0&rpar; 收藏

    1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...

  9. shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15&colon;49 31人阅读 评论&lpar;0&rpar; 收藏

    格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...

随机推荐

  1. 团队项目2&period;0软件改进分析MathAPP

    软件改进分析 在此基础上,进行软件的改进. 首先,我们把这个软件理解成一个投入市场的.帮助小朋友进行算术运算练习的APP. 从质量保证的角度,有哪些需要改进的BUG? 从用户的角度(把自己当成小学生或 ...

  2. css3新属性的总结

    今天继续总结css3的一些css3新样式,先列一个简单的提纲,重要的还是圆角.阴影.渐变.文字缩略,最最重要的是过度transition,变换transform和animation圆角阴影渐变 圆形渐 ...

  3. 【转】如何用 Chrome for Android 做远程遥控 debugging

    http://blog.csdn.net/wuchengzhi82/article/details/22190435

  4. 最大子序列和(O&lpar;n&rpar;)

    下面介绍一个线性的算法,这个算法是许多聪明算法的典型:运行时间是明显的,但是正确性则很不明显(不容易理解). //线性的算法O(N) long maxSubSum4(const vector<i ...

  5. Effective java笔记7--线程

    一.对可共享数据的同步访问 synchronized关键字可以保证在同一时刻,只有一个线程在执行一条语句,或者一段代码块.正确地使用同步可以保证其他任何方法都不会看到对象处于不一致的状态中,还能保证通 ...

  6. JAVA安卓和C&num; 3DES加密解密的兼容性问题&lpar;2013年8月修改版&rpar;

    近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的By ...

  7. Excel——使用VLOOKUP函数关联跨工作薄数据

    实验环境 有两个工作簿,一个是<花名册>,另一个是<入离职表>,<花名册>上有所有员工的详细信息,包括员工的姓名.部门.出生日期等,<入离职表>上有离职 ...

  8. MyEclipse编码方式设置

    1.windows -> Preferences -> general -> Workspace:

  9. fabric默认样例的分析

    参考资料 http://www.bubuko.com/infodetail-2092748.html http://www.ithao123.cn/content-11117437.html http ...

  10. 文件夹进行MD5校验的实现算法

    每份相同数据(文件夹)都可以生成一份唯一的md5校验文件,我们可以通过直接校验整个数据文件夹的方法来确定数据是否有误. 1.针对整个文件夹生成md5校验文件方法: 以data文件夹为例,我们需要得到d ...