你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
iOS-摇一摇动画效果加音效处理效果
立即下载
用AI写一个
金额:
3
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
我要免费下载
发布时间:2019-06-16
1人
|
浏览:1892次
|
收藏
|
分享
技术:AVFoundation+AudioToolbox+runtime
运行环境:iOS
概述
1.摇动手机页面,整体的摇动效果 2.声音的开关控制,可单独做声音控制工具类 3.播放音乐工具类,可单独抽出做其他相关声音类工具使用.
详细
众所周知, 摇一摇功能有搜索人/歌曲/电视,也有一个摇一摇签到, 摇一摇随机选号等功能,下面以微信摇一摇功能来介绍实现原理. ### 一、程序实现 ##### 1. 监听摇一摇方法 ``` // 摇一摇开始 - (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0); // 摇一摇结束 - (void)motionEnded:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0); // 摇一摇取消 - (void)motionCancelled:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0); ``` ##### 2. 解决摇一摇失效的情况. PS:使用 Xcode6.x 后创建的项目,仅仅实现第一步监听就可以实现,没有遇到这种问题. ``` - (BOOL)canBecomeFirstResponder { return YES; } ``` ##### 3. 摇一摇阶段需要震动及声音. 摇动开始: ``` /** 开始摇一摇 */ - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { NSLog(@"motionBegan"); if([[[NSUserDefaults standardUserDefaults] objectForKey:MUteSwitchKey] boolValue]){ [ZLAudioTool playMusic:@"shake.mp3"]; } [self startShakeAnimation]; } ``` ##### 4. 摇一摇阶段需要动画效果. 摇一摇动画: ``` #pragma mark - 执行摇一摇动画 - (void)startShakeAnimation { [self.shakeImageView.layer removeAnimationForKey:@"shake"]; CABasicAnimation* shake = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; //设置抖动幅度 shake.fromValue = [NSNumber numberWithFloat:-0.4]; shake.toValue = [NSNumber numberWithFloat:+0.4]; shake.duration = 0.17; shake.delegate = self; shake.autoreverses = YES; //是否重复 shake.repeatCount = 3; [self.shakeImageView.layer addAnimation:shake forKey:@"shake"]; } ``` CAAnimationDelegated动画执行结束回调: ``` #pragma mark - CAAnimationDelegated动画执行结束回调 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { if([[[NSUserDefaults standardUserDefaults] objectForKey:MUteSwitchKey] boolValue]){ [ZLAudioTool playMusic:@"result.mp3"]; } // TODO: NSInteger i = arc4random() % 100; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:@"%ld号签", (long)i] message:[NSString stringWithFormat:@"%ld号内容", (long)i] preferredStyle:UIAlertControllerStyleAlert]; alertController.titleColor = UIColorFromRGB(0x333333); alertController.messageColor = UIColorFromRGB(0x555555); [alertController addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleDefault handler:nil]]; [self presentViewController:alertController animated:YES completion:nil]; } ``` ##### 5. 播放音乐工具类,可单独抽出做其他相关声音类工具使用. ``` /** * 播放音乐 * * @param filename 音乐的文件名 */ + (void)playMusic:(NSString *)filename { @try { NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; SystemSoundID soundID = 0; AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); AudioServicesPlaySystemSound(soundID); } @catch (NSException *exception) { NSLog(@"处理异常%@", exception); } @finally { NSLog(@"异常完成"); } } ``` ##### 6. 声音的开关控制,可单独做声音控制工具类使用 ``` - (instancetype)init{ if (self = [super init]){ NSURL* url = [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"MuteSwitchListener" ofType:@"bundle"]] URLForResource:@"silence" withExtension:@"mp3"]; if (AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &_soundId) == kAudioServicesNoError){ UInt32 yes = 1; AudioServicesAddSystemSoundCompletion(self.soundId, CFRunLoopGetMain(), kCFRunLoopCommonModes, MuteSwitchListenerNotificationCompletionProc, (__bridge void *)(self)); AudioServicesSetProperty(kAudioServicesPropertyIsUISound, sizeof(_soundId), &_soundId, sizeof(yes), &yes); [self performSelector:@selector(loopCheck) withObject:nil afterDelay:1]; } else { self.soundId = -1; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willReturnToForeground) name:UIApplicationWillEnterForegroundNotification object:nil]; } return self; } + (instancetype)shareInstance{ static MuteSwitchListener* sShared = nil; if (!sShared) sShared = [MuteSwitchListener new]; return sShared; } - (void)setMuteListenerBlock:(MuteSwitchListenerBlock)muteListenerBlock{ _muteListenerBlock = muteListenerBlock; } ``` ### 二、运行效果 运行效果:  ### 三、项目结构图  ### 四、其他补充 当然也有使用摇一摇做其他功能的,可以在当结束摇动时,就发送一个网络请求作相关操作即可。 界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行!
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
0
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
smile丽语
33
例子数量
699
帮助
33
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
iOS仿支付宝芝麻信用仪表盘效果
iOS-夜间模式(换肤设置)
iOS-自定义起始时间选择器视图
iOS-仿支付宝刮刮乐效果
iOS-各种动画特效
iOS-高仿通讯录之商品索引排序搜索
iOS-APP启动页加载广告
iOS-启动动态页跳过设计思路
TouchID 指纹解锁
iOS-高仿支付宝手势解锁(九宫格)
iOS-高仿微信摇一摇动画效果加震动音效
3DTouch - iOS新特性
iOS-仿京东6位密码支付输入框
iOS- 非整星的评分控件(支持小数)
iOS-按钮单选与多选逻辑处理
iOS- 快速实现展示布局
iOS开发之复制字符串到剪贴板
iOS点击获取短信验证码按钮
iOS利用SDWebImage实现缓存的计算与清理
利用 AFN 上传相册或拍照图片
iOS自定义从底部弹上来的View
iOS支付宝支付集成
iOS微信支付集成
富文本处理NSMutableAttributedString
iOS-仿智联字符图片验证码
iOS活动倒计时的两种实现方式
iOS-格式化金额,三位一逗号
iOS-使用添加的花样字体
iOS-仿支付宝加载web网页添加进度条
iOS-贝塞尔曲线之自定义饼图