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. react-navigation 3.x版本的安装以及react-native-gesture-handler配置

    一.安装依赖,使用npm或yarn命令,3.x版本必须安装react-native-gesture-handler react-navigation react-native-gesture-hand ...

  2. 如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。

    在配置文件中添加 <identity   impersonate= "true "   userName= "Administrator "   pass ...

  3. SSM框架整合的详细过程(含每一步的分析及代码)。实质上是SpringMVC与mybatis的整合,应为spring与SpringMVC不需要整合。

    为了更好的学习 springmvc和mybatis整合开发的方法,需要将springmvc和mybatis进行整合. 整合目标:控制层采用springmvc.持久层使用mybatis实现. 1.1 需 ...

  4. 不要怂,就是GAN (生成式对抗网络) (二):数据读取和操作

    前面我们了解了 GAN 的原理,下面我们就来用 TensorFlow 搭建 GAN(严格说来是 DCGAN,如无特别说明,本系列文章所说的 GAN 均指 DCGAN),如前面所说,GAN 分为有约束条 ...

  5. Redis是可以安装成windows服务-开机自启 win7 64位

    其实Redis是可以安装成windows服务的,开机自启动,命令如下: redis-server --service-install redis.windows.conf 安装完之后,就可看到Redi ...

  6. Opengl的TOOL收集

    1. http://my.oschina.net/sweetdark 不错的opengl学习网站 2, 优秀博客 网址: http://www.zwqxin.com/archives/opengl/s ...

  7. 微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查

    1 .什么是健康检查? 健康检查几乎就是名称暗示的.它是一种检查您的应用程序是否健康的方法.随着越来越多的应用程序转向微服务式架构,健康检查变得尤其重要(Health Check).虽然微服务架构有很 ...

  8. LUN

    1概念 LUN的全称是Logical Unit Number,也就是逻辑单元号.我们知道SCSI总线上可挂接的设备数量是有限的,一般为8个或者16个,我们可以用Target ID(也有称为SCSI I ...

  9. Javascript设计模式理论与实战:适配器模式

    有的时候在开发过程中,我们会发现,客户端需要的接口和提供的接口发生不兼容的问题.由于特殊的原因我们无法修改客户端接口.在这种情况下,我们需要适配现有接口和不兼容的类,这就要提到适配器模式.通过适配器, ...

  10. 查看jar包的jdk版本并降级

    用解压工具打开jar包(例子都是用7zip)   进入到META-INF目录,查看MANIFEST.MF文件,查看Bulid-Jdk,下图就为1.7.0_55版本的JDK,这就表示jetty-serv ...