Touch:在与设备的多点触摸屏交互时生成。

响应者对象
响应者对象就是可以响应事件并对事件作出处理。在iOS中,存在UIResponder类,它定义了响应者对象的所有方法。UIApplication、UIView等类都继承了UIResponder类这些类的实例都可以当作响应者。 第一响应者
当前接受触摸的响应者对象被称为第一响应者,即表示当前该对象正在与用户交互,它是响应者链的开端。 响应者链
事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者。一般来说,第一响应者是个视图或控件,并且首先对事件进行响应,如果第一响应者不处理该事件,事件就会被传递给它的视图控制器,如果此视图控制器不处理该事件,则将事件传递给父视图,如果父视图没有响应,则该事件转到父视图控制器。
,以此类推,直到顶层视图。接下来会沿着顶层视图到窗口(UIWindow对象)再到程序(UIApplication对象)。如果UIApplication不响应该事件,该事件逐渐进入睡眠状态。 当发生触摸时,会触发下列方法:
touchesBegan:withEvent
touchesMoved:withEvent
touchesEnded:withEvent
touchesCancelled:withEvent 在给定的触摸阶段中,如果发生新的触摸动作或已有的触摸动作发生变化,应用程序就会发送如下消息:
当一个或多个手指触碰屏幕时,发送touchesBegan:withEvent:消息。
当一个或多个手指在屏幕上移动时,发送touchesMoved:withEvent:消息。
当一个或多个手指离开屏幕时,发送touchesEnded:withEvent:消息。
当触摸序列被诸如电话呼入这样的系统事件所取消时,发送touchesCancelled:withEvent:消息。 以上方法都有两个参数。
第一个参数是一个UITouch对象的集合,表示给定阶段中 新的或者发生变化的触摸动作;第二个参数是一个UIEvent对象,表示这个特定的事件。 为了处理给定阶段的事件,响应者对象常常从传入的集合参数中取得一或多个UITouch对象,然后考察这些对象的属性或取得它们的位置.
.如果需要处理所有触摸对象,可以向该NSSet对象发送anyObject消息。
.UITouch实例的tapCount属性还可以给出发生多少次触碰
.UITouch类中有一个名为locationInView:的重要方法,如果传入self参数值,它会给出触摸动作在响应者坐标系统中的位置 检测双击手势
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch *touch = [touches anyObject];
if ([touch tapCount] == ) {
CGPoint tapPoint = [theTouch locationInView:self];
// Process a double-tap gesture
}
} 响应者类并不是必须实现上面列出的事件方法。举例来说,如果它只对手指离开屏幕感兴趣,则只需要实现touchesEnded:withEvent:方法就可以了。 UILabel *_messageLabel;
@property(nonatomic, retain) UILabel *messageLabel; @synthesize messageLabel = _messageLabel; //创建messageLabel
_messageLabel = [[UILabel alloc]initWithFrame:CGRectMake(, , , )];
_messageLabel.backgroundColor = [UIColor clearColor];
_messageLabel.textAlignment = UITextAlignmentLeft;
[self.view addSubview:messageLabel]; - (void)updateMessageLabelFromTouches:(NSSet *)touches touchStr:(NSString *)touchStr
{
int munTaps = [[touches anyobject] tapCount];
NSString *tapsMessage = [NSString stringWithFormat:@"%@,%d touches",touchStr,munTaps]
_messageLabel.text = tapsMessage;
}
// 手指触碰屏幕时
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSString *tmpStr = @"Touches Began";
[sele updateMessageLabelFromTouches:touches touchStr:tmpStr]; } // 手指在屏幕上移动时
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
{
NSString *tmpStr = @"Touches Moved";
[sele updateMessageLabelFromTouches:touches touchStr:tmpStr];
} // 手指离开屏幕时
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
{
NSString *tmpStr = @"Touches Ended";
[sele updateMessageLabelFromTouches:touches touchStr:tmpStr];
} // 当触摸序列被系统事件所取消时
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
NSString *tmpStr = @"Touches Cancelled";
[sele updateMessageLabelFromTouches:touches touchStr:tmpStr];
} .手势:是指从你用一个或多个手指接触屏幕时开始,直到你的手指离开屏幕为止所发生的所有事件。 2.1.UITapGestureRecognizer敲击手势(单击和双击)
 2.2.UIPanGestureRecognizer(拖动手势)
 2.3.UIPinchGestureRecognizer(缩放手势)
 2.4.UISwipeGestureRecognizer(滑动手势)
 2.5.UIRotationGestureRecognizer(旋转手势)
 2.6.UILongPressGestureRecognizer(长按手势) • .UITapGestureRecognizer敲击手势
UIView *_view
_View = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
[_view setBackgroundColor:[UIColor redColor]]; // 单击的 Recognizer
UITapGestureRecognizer *tapRecognizer= [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
//点击的次数
tapRecognizer.numberOfTapsRequired = ; // 单击
tapRecognizer.numberOfTapsRequired = ; // 双击
//点击的手指数
singleRecognizer.numberOfTouchesRequired = ; //给view添加一个手势监测;
[tapView addGestureRecognizer:singleRecognizer]; // 单击或双击后调用的方法
- (void) tap:(UITapGestureRecognizer *)sender
{
if (sender.numberOfTapsRequired == ) {
[_view setBackgroundColor:[UIColor greenColor]];
}else if(sender.numberOfTapsRequired == ){
//双击
[_view setBackgroundColor:[UIColor yellowColor]];
}
} .1UIPanGestureRecognizer(拖动手势)
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[_view addGestureRecognizer: panRecognizer]; -(void) pan:(UIPanGestureRecognizer *) pan
{
[_panView setBackgroundColor:[UIColor yellowColor]]; } .1UIPinchGestureRecognizer(缩放手势)
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
[_view addGestureRecognizer: *pinchRecognizer]; - (void)pinch:(UIPinchGestureRecognizer *)pinch
{
[_pinchView setBackgroundColor:[UIColor yellowColor]];
} 4.1 UISwipeGestureRecognizer 滑动手势
UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
//设置滑动方向 Down/Left/Right/Up
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
[_view addGestureRecognizer:swipeRecognizer]; - (void)swipe:(UISwipeGestureRecognizer *)swipe
{
[_swipeView setBackgroundColor:[UIColor yellowColor]];
} .1UIRotationGestureRecognizer(旋转手势)
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)]
[_view addGestureRecognizer:rotation]; - (void) rotation:(UIRotationGestureRecognizer *)rotation
{
[_rotationView setBackgroundColor:[UIColor yellowColor]];
} 6.1 UILongPressGestureRecognizer长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[_longPressView addGestureRecognizer:longPress];
longPress.minimumPressDuration = 3.0; // 按3秒相应
[_view addGestureRecognizer:longPress]; - (void)longPress:(UILongPressGestureRecognizer *)longPress
{
[_longPressView setBackgroundColor:[UIColor yellowColor]];
}

IOS开发之---触摸和手势的更多相关文章

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

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

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

    -- iOS事件全面解析 转载来自崔江涛(KenshinCui) 链接:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一 ...

  3. iOS开发之触摸事件及手势

    1.iOS中的事件 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 2.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并 ...

  4. iOS 开发的几种手势

    今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView ...

  5. ios开发之触摸&手势识别

    概要: 4个触摸事件.6个手势识别.响应者链条 1.4个触摸事件 1> 触摸事件主要是针对视图的,包括 - (void)touchesBegan:(NSSet *)touches withEve ...

  6. iOS开发中常用的手势---边缘手势

    说明:以下方法是开发中使用的方法,有什么不对的或者好的方法,请多多指教! 此处的边缘手势是用来控制左侧抽屉视图的弹出以及收回. 添加手势 : 页面上有多个手势时需要遵循 UIGestureRecogn ...

  7. iOS开发UITouch触摸API简介

    1.UITouch简介 当用户触摸屏幕时,会创建一个UITouch对象: UITouch的作用保存着触摸相关的信息,比如触摸的位置.时间.阶段等: 当从开始到结束,系统会更新UITouch对象,结束时 ...

  8. iOS开发:自定义控件实现手势解锁

    自定义控件 1.提供initWithFrame:及initWithCoder:方法来初始化: 2.解锁控件只负责展示.触摸.绘图等,存储轨迹.判断轨迹等操作不是解锁控件要做的.因此要定义一个代理,将轨 ...

  9. IOS开发中长按的手势事件编程

    长按手势事件: 长按按钮1S后改变按钮颜色: // 长按事件 #import "ViewController.h" @interface ViewController (){ UI ...

随机推荐

  1. 【转载】C代码优化方案

    C代码优化方案 1.选择合适的算法和数据结构2.使用尽量小的数据类型3.减少运算的强度 (1)查表(游戏程序员必修课) (2)求余运算 (3)平方运算 (4)用移位实现乘除法运算 (5)避免不必要的整 ...

  2. cocos2d-x3.2中怎样优化Cocos2d-X游戏的内存

    在游戏项目优化中都会碰到一个问题,怎样既能降低内存又能尽量降低包的大小?在实际项目中有些经验分享一下,其实2D游戏中最占内存的就是图片资源,一张图片使用不同的纹理格式带来的性能差异巨大.下表是我在IO ...

  3. 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.

    本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...

  4. ping不通的几种可能原因

    平时使用中常常会碰到ping不通的情况,ping不通的原因有非常多,比方路由设置问题,比方网络问题,下面列出几点原因:      1.太心急.即网线刚插到交换机上就想Ping通网关,忽略了生成树的收敛 ...

  5. 在Ubuntu上为Android系统编写Linux内核驱动程序

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有 ...

  6. 在IIS Express中调试时无法读取配置文件

    在IIS Express中调试代码时,如果出现“无法读取配置文件”的问题(如图),这种情况是IIS Express的“applicationhost.config”配置文件中的映射关系出了问题[ps: ...

  7. css基础-背景文本

    css背景 1. background-color:#6495ed; 2. background-image:url('bgdesert.jpg'); 3. background-repeat:rep ...

  8. WP8.1 页面导航 缓存问题

    最近开始学习wp8.1开发,在页面的导航学习时发现了一点问题,即当使用Frame.Navigate()方法进行页面的跳转时,每次都会重新实例化一个页面.而在新的页面采用Frame.GoBack()或者 ...

  9. CMarkUp读写XML(转)

    Fast start to XML in C++ Enough bull. You want to create XML or read and find things in XML. All you ...

  10. 轻量级jquery框架之--布局(layout)

    布局需求 (1)支持横向生成布局项即可,不需要纵向生成布局. (2)支持布局项右侧收缩功能 (3)支持自定义布局项图标.标题,并提供动态修改布局项图片和标题的api (4)支持JSON/html/if ...