美文网首页
ios触摸事件

ios触摸事件

作者: 飞天猪Pony | 来源:发表于2018-08-30 14:53 被阅读16次

一、触摸事件

下面的四个方法都有的参数:
@param NSSet *) touches 触摸点集合 (根据触摸点的个数可以判断是几个触摸点)
@param event 事件对象,记录事件产生的时刻和类型(下面的四个方法传入都是同一个对象)

// 手指开始触摸view,系统会自动调用方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

// 手指在view上移动,系统会自动调用(随着手指的移动,会持续调用该方法)
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

// 当手指离开这个view的时候
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

// 触摸结束前,有可能系统的事件打断了触摸的响应,会调用的方法。(系统方法例如:电话来了)
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

UITouch 对象:
我们用手指触摸屏幕的时候,就会创建一个与触摸点关联的 UITouch 对象,每一个触摸点对应一个UITouch 实例对象
这个对象保存了与触摸相关的信息(位置、时间、阶段)
触摸点改变(手指移动),系统对应更新 UITouch 对象,适时地记录触摸点信息。
触摸结束时候,UITouch 对象被销毁
UITouch 方法:
返回当前触摸点在 View 上面的位置,传入 View 为 nil 时候位置是在 UIWindow。
-(CGPoint)locationInView:(UIView *)view;
返回前一个触摸点在 View 上的位置。
-(CGPoint)previousLocationInView:(UIView *)view;


二、加速计事件

// 开始摇晃 加速计事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

// 摇晃结束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

// 摇晃取消
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
小例子:摇一摇简单实现

先在targets -> Build Phases -> Link Binary With Libraries里面添加AudioToolbox.framework;
AudioservicesPlaySystemSound函数来播放简单的声音
1.音频长度小于30秒
2.格式只能是PCM或者IMA4
3.文件必须被存储为.caf、.aif、或者.wav格式
4.简单音频不能从内存播放,而只能是磁盘文件


注意局限性: 无法循环播放声音,也无法控制立体声效果。可以设置一个回调函数,在音频播放结束时被调用,可以对音频对象做清理工作,以及通知你的程序播放结束。
在模拟器中运行时,可以通过「Hardware」-「Shake Gesture」来测试「摇一摇」功能

导入音频的头文件
#import 
定义一个回调函数,就是我们摇一摇的音效播放完回调方法函数
// 当音频播放完毕会调用这个函数
// 在完成处理程序标签存储在 data 。需要到 __bridge 。
static void SoundFinished(SystemSoundID soundID, void *data){  
  /*播放全部结束,因此释放所有资源 */
  AudioServicesDisposeSystemSoundID(soundID);  
  NSLog(@"%s--->%@",__func__,(__bridge UIViewController *)data);
}
  //设置允许摇一摇功能
  // 允许摇一摇功能
  [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;// 设置第一响应者
  [self becomeFirstResponder];

  //开始摇晃的时候我们播放音效
  // 注册系统音频ID
  SystemSoundID soundID;

  // 获取声音的路径
  NSString *path = [[NSBundle mainBundle] pathForResource:@"59" ofType:@"m4a"];
  NSURL *soundUrl = [NSURL fileURLWithPath:path];

  // 根据路径创建
  AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundUrl, &soundID);
  /*

   *参数说明:
   * 1、刚刚播放完成自定义系统声音的ID
   * 2、回调函数(playFinished)执行的run Loop,NULL表示main run loop
   * 3、回调函数执行所在run loop的模式,NULL表示默认的run loop mode
   * 4、需要回调的函数
   * 5、传入的参数, 此参数会被传入回调函数里
   */
  AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, SoundFinished, (__bridge void *)self);

  // 开始播放
  AudioServicesPlaySystemSound (soundID);
  return;
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    NSLog(@"取消摇动");
    return;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (event.subtype == UIEventSubtypeMotionShake) {
        // 判断是否是摇动结束
        NSLog(@"摇动结束");
    }  
    return;  
}

相关文章

  • iOS 事件的传递响应机制

    iOS 中的事件 触摸事件 加速计事件 远程控制事件 iOS 中的触摸事件1、触摸事件发生,操作系统iOS会将此类...

  • iOS 事件以及手势的处理

    iOS 事件以及手势的处理 首先引用深入浅出iOS事件机制,iOS触摸事件处理详解,详解iOS触摸事件与手势识别三...

  • iOS 触摸事件与响应理解

    参考文章: iOS触摸事件的流动 iOS触摸事件的传递与响应 UIViewController UIAppli...

  • 《iOS事件触摸与手势》

    iOS事件触摸与手势 一、事件分发处理【由外到内】在iOS中发生触摸后,事件会加到UIApplication事件队...

  • iOS事件

    概述 iOS中事件有触摸事件、加速计事件、远程控制事件,下面以触摸事件为例研究下iOS事件相关的内容 UIResp...

  • iOS 点击事件传递及响应

    1.iOS中的事件 iOS中的事件可以分为3大类型: 触摸事件加速计事件远程控制事件这里我们只讨论iOS中的触摸事...

  • iOS事件传递与响应原理

    iOS 中的事件可以分为3大类:触摸事件、加速计事件、远程控制事件,本文仅以 iOS 中的触摸事件为例进行讨论,主...

  • iOS响应链

    概念: 1 iOS有四大事件:触摸事件,运动事件,远程控制事件,3Dtouch事件。 我们重点介绍触摸事件。触摸事...

  • 17·iOS 面试题·描述一下触摸事件传递流程

    前言 在 iOS 中,常见的事件有:触摸事件、加速计事件、远程控制事件等。在这里我们主要讨论触摸事件,对于触摸事件...

  • 事件处理

    iOS事件分类以及相关方法 在iOS中事件分为三类: 触摸事件:通过触摸、手势进行触发(例如手指点击、缩放、旋转)...

网友评论

      本文标题:ios触摸事件

      本文链接:https://www.haomeiwen.com/subject/elzrwftx.html