// // RootViewController.m #import "RootViewController.h" #import <AudioToolbox/AudioToolbox.h> @interface RootViewController () @end @implementation RootViewController -(void)createUI { UIImageView * imageView = [[UIImageView alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; imageView.image = [UIImage imageNamed:@"cat_angry0001.jpg"]; //开启imageView的交互权限 imageView.userInteractionEnabled = YES; //为imageView添加点击手势 UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; [imageView addGestureRecognizer:tap]; [self.view addSubview:imageView]; } //系统提示音播放结束的方法 //这个方法必须是C语言函数 //这个方法的返回值类型以及参数类型都是固定的 void finishSound (SystemSoundID SID,void * info) { //向系统注销刚刚注册的SoundID AudioServicesDisposeSystemSoundID(SID); NSLog(@"提示音播放结束"); } -(void)tapAction:(UITapGestureRecognizer *)tap { //添加系统提示 需要导入AudioToolbox.framework 并且导入这个头文件 //系统提示音设置到的所有方法都是AudioServices开头 //这种方法创建的音频有一定的局限性 /* 1、音频的播放时间小于30s 2、播放的音频格式:wav aif caf格式 3、只要触发该音频 就会立即播放 4、这种样式的音频不能暂停也不能循环播放 */ //<1>获取音频路径 NSString * path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav"]; //<2>本地路径转化成NSURL //转化本地地址 NSURL * url = [NSURL fileURLWithPath:path]; //转化网络地址 // NSURL * url = [NSURL URLWithString:网络地址]; //<3>开始创建系统音频 //1、CFURLRef 与 NSURL原理相同 只是表现的形式不同而已 这两种类型可以相互转换 //2、创建系统提示音 必须向系统注册一个系统音频ID号 如果不注册的话 音频播放不成功 SystemSoundID SID = 0; AudioServicesCreateSystemSoundID((CFURLRef) url, &SID); //<4>播放系统提示音 AudioServicesPlaySystemSound(SID); //<5>音频播放结束以后会触发一个方法 AudioServicesAddSystemSoundCompletion(SID, NULL, NULL,finishSound, NULL); } - (void)viewDidLoad { [super viewDidLoad]; [self createUI]; }