1、摇一摇的原理分析

1)在摇动手机时会产生一个动画,界面的图片会在中间分开分别进行向上、向下的位置移动。

分析:此过程就是在主屏幕上设置两个imageView,在开始摇动的方法中对这两个imageView进行位置移动,界面的层次结构如下图:

2)在界面进行动画操作的同时播放音频

分析:在执行动画的方法中添加播放音频的代码

3)在结束晃动时做出相应的操作:发送随机数据请求、页面的跳转等等

2、VC.m文件的代码如下:

#import "ViewController.h"
#import "NextViewController.h"
#import <AudioToolbox/AudioToolbox.h>
#define SCREEN_WIDTH self.view.bounds.size.width
#define SCREEN_HEIGHT self.view.bounds.size.height
@interface ViewController ()
@property (strong,nonatomic)UIImageView * topImage;
@property (strong,nonatomic)UIImageView * bottomImage;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;
[self setupImageView]; }
/**
* 播放MP3
*/
- (void)playMp3
{
NSString * mp3Path = [[NSBundle mainBundle]pathForResource:@"glass.wav" ofType:nil]; NSURL * soundUrl = [NSURL fileURLWithPath:mp3Path];
SystemSoundID soundId;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(soundUrl), &soundId);
AudioServicesPlaySystemSound(soundId); }
- (void)setupImageView
{
self.topImage = [[UIImageView alloc]initWithFrame:CGRectMake(, , SCREEN_WIDTH, SCREEN_HEIGHT/)];
self.topImage.image = [UIImage imageNamed:@"Shake_01"];
[self.view addSubview:self.topImage]; self.bottomImage = [[UIImageView alloc]initWithFrame:CGRectMake(, SCREEN_HEIGHT/, SCREEN_WIDTH, SCREEN_HEIGHT/)];
self.bottomImage.image = [UIImage imageNamed:@"Shake_02"];
[self.view addSubview:self.bottomImage]; }
/**
* 开始摇动
*/
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
[UIView animateWithDuration:1.0 animations:^{ [self playMp3];
self.topImage.transform = CGAffineTransformMakeTranslation(, -);
self.bottomImage.transform = CGAffineTransformMakeTranslation(, );
}]; }
/**
* 结束取消
*/
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
[UIView animateWithDuration:1.0 animations:^{ self.topImage.transform = CGAffineTransformIdentity;
self.bottomImage.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) { [self.navigationController pushViewController:[[NextViewController alloc]init] animated:YES];
}];
}
/**
* 结束摇动
*/
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
[UIView animateWithDuration:1.0 animations:^{ self.topImage.transform = CGAffineTransformIdentity;
self.bottomImage.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) { [self.navigationController pushViewController:[[NextViewController alloc]init] animated:YES];
}]; }
@end

3、测试的时候最好在真机上测试。

demo下载地址:https://github.com/fengzhihao123/FZHShake

iOS ---进阶之摇一摇的更多相关文章

  1. iOS开发 传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  2. iOS开发——高级篇——传感器(加速计、摇一摇、计步器)

    一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...

  3. ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数

    今天遇到一个问题,第一次运行程序时,- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event函数无法调用,第二次就好了 ...

  4. iOS开发——高级技术&摇一摇功能的实现

    摇一摇功能的实现 在AppStore中多样化功能越来越多的被使用了,所以今天就开始介绍一些iOS开发的比较实用,但是我们接触的比较少的功能,我们先从摇一摇功能开始 在 UIResponder中存在这么 ...

  5. IOS端的摇一摇功能

    //微信的摇一摇是怎么实现的~发现原来 ios本身就支持 //在 UIResponder中存在这么一套方法 - (void)motionBegan:(UIEventSubtype)motion wit ...

  6. IOS中微信摇一摇声音无法播放解决办法

    在IOS中第一次调用play方法播放音频会被阻止,必须得等用户有交互动作,比如touchstart,click后才能正常调用,所以可以在摇一摇之前提醒用户点击一下开始游戏的按钮或者给用户一个弹窗,用户 ...

  7. IOS 摇一摇的方法

    ● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单) ● 判断摇一摇的步骤:实现3个摇一摇监听方法 ● ...

  8. swift 实现 iOS摇一摇

    本博客包含了如何实现iOS摇一摇全步骤,包括了完整的代码. 先附上demo地址https://github.com/Liuyubao/LYBShake ,支持swift3.0+. 一.导包 项目主要使 ...

  9. 不会吧,这也行?iOS后台锁屏监听摇一摇

    目录 背景介绍 探索过程 其他 APP 有没有类似功能 系统提供的摇一摇回调能否满足 其他方法能否实现 利用 CoreMotion 框架,监听加速计原始数据 通过加速计监听摇一摇 控制器相关逻辑和代码 ...

随机推荐

  1. python爬虫如何POST request payload形式的请求

    python爬虫如何POST request payload形式的请求1. 背景最近在爬取某个站点时,发现在POST数据时,使用的数据格式是request payload,有别于之前常见的 POST数 ...

  2. Halcon中缩放Region或XLD的方法研究

    在Halcon中,Region和XLD之间可以彼此转换.但这种转换并不是“无损”的,XLD可以是不闭合的,但是Region一定是闭合的.因此,如果将不闭合的XLD转为Region,然后再转回XLD,那 ...

  3. 如何用Python实现常见机器学习算法-1

    最近在GitHub上学习了有关python实现常见机器学习算法 目录 一.线性回归 1.代价函数 2.梯度下降算法 3.均值归一化 4.最终运行结果 5.使用scikit-learn库中的线性模型实现 ...

  4. .net core利用MySqlBulkLoader大数据批量导入MySQL

    最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...

  5. K8s基于DNS的服务发现(转)

    原文地址:https://www.oschina.net/question/2657833_2201246 1.Kubernetes中如何发现服务 ◆   发现Pod提供的服务 首先使用nginx-d ...

  6. java内存溢出异常

    名称 特征 作用 配置参数 异常 程序 计数器 占用内存小,线程私有, 生命周期与线程相同 大致为字节码行号指示器 无 无 虚拟机栈 线程私有,生命周期与线程 相同,使用连续的内存空间 Java 方法 ...

  7. Linux 基础教程 27-ss和ip命令

    什么是netstat     在Linux系统中输入 man netstat,显示的结果如下所示: netstat - Print network connections, routing table ...

  8. 自我简介与Github的注册和使用

    我叫陈鑫,学号1413042059,来自网络工程142班.喜欢打乒乓球,玩策略类游戏,团队竞技.                                                     ...

  9. jenkin+docker+git持续集成环境搭建

    1.安装Jenkins(需要在Jenkins容器中安装maven,java环境不用安装,Jenkins初次启动时会自动安装) 参考:docker中安装Jenkins 2.配置git 3.安装docke ...

  10. ES6摘抄

    1.函数可选参数function log(x, y = 'World') {} 只能作为尾参数使用,因为如果不是尾参数还是要输入的.2.函数参数默认值与解构赋值结合使用.(注意对象冒号解构等号)fun ...