一、触摸事件
下面的四个方法都有的参数:
@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;
}