触摸事件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 = @"触摸 取消";
}
时间: 2024-12-20 05:16:18

触摸事件UITouch的应用的相关文章

UITouch触摸事件

UITouch触摸事件 主要为三个方法 1.-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{2.3. UITouch *touch = [touches anyObject];4. CGPoint point = [touch locationInView:self];5. start = point;6. end = point;7.8.}9.10.-(void)touchesMoved:(NSSet *)touc

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

触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 二.UIResponder UIResponder内部提供了以下方法来处理事件触摸事件- (v

IOS开发—事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别

触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 二.UIResponder UIResponder内部提供了以下方法来处理事件触摸事件- (v

UITouch/UIResponder:iOS上触摸事件的视图检测和事件传递

iPhone上有非常流畅的用户触摸交互体验,能检测各种手势:点击,滑动,放大缩小,旋转.大多数情况都是用UI*GestureRecognizer这样的手势对象来关联手势事件和手势处理函数.也有时候,会看到第三方代码里会在如下函数中进行处理: -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event: 那么问题就来了,手势和touch到底有什么区别和联系?这一切还得从头iOS触摸事件检测,以及UIResponder(响应者)开始说起

touches,motion触摸事件响应

//触摸事件响应需要重写方法 1 // 触摸时触发该方法(消息发送) 2 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 3 UITouch *touch = [touches anyObject]; 4 CGPoint point = [touch locationInView:self.rootView.touchView];//locationInView:得到当前点击下在指定视图中

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

-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件.远程控制事件等展开学习: iOS事件简介 触摸事件 手势识别 运动事件 远程控制事件 iOS事件 在iOS中事件分为三类: 触摸事件:通过触摸.手势进行触发(例如手指点击.缩放) 运动事件:通过加速器进行触发(例如手机晃动) 远程控制事件:通过其他远程设备触发(例如耳机控制

iOS边练边学--触摸事件以及能够拖拽的UIView的练习

一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此他们都是响应者对象,都能够接受并处理事件 UIResponder内部提供了以下方法来处理事件 三.练习中对UIView的触摸事件进行了熟悉 四.UITouch 一根手指对应一个UITou

2.0 触摸事件

UIView不接收触摸事件的三种情况: 1.不接收用户交互 userInteractionEnabled = NO 2.隐藏 hidden = YES 3.透明 alpha = 0.0 ~ 0.01 4. 如果子视图的位置超出了父视图的有效范围, 那么子视图也是无法与用户交互的, 即使设置了父视图的 clipsToBounds = NO, 可以看懂, 但是也是无法与用户交互的 提示:UIImageView的userInteractionEnabled默认就是NO,因此UIImageView以及它

iOS开发笔记--iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类:原文:http://my.oschina.net/aofe/blog/268749 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIRespon