前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别,下面我们简单介绍一下运动事件。在iOS中和运动相关的有三个事件:开始运动、结束运动、取消运动。

监听运动事件对于UI控件有个前提就是监听对象必须是第一响应者(对于UIViewController视图控制器和UIAPPlication没有此要求)。这也就意味着如果监听的是一个UI控件那么-(BOOL)canBecomeFirstResponder;方法必须返回YES。同时控件显示时(在-(void)viewWillAppear:(BOOL)animated;事件中)调用视图控制器的becomeFirstResponder方法。当视图不再显示时(在-(void)viewDidDisappear:(BOOL)animated;事件中)注销第一响应者身份。

由于视图控制器默认就可以调用运动开始、运动结束事件在此不再举例。现在不妨假设我们现在在开发一个摇一摇找人的功能,这里我们就自定义一个图片展示控件,在这个图片控件中我们可以通过摇晃随机切换界面图片。代码比较简单:

KCImageView.m

  1. //
  2. //  KCImageView.m
  3. //  TouchEventAndGesture
  4. //
  5. //  Created by Kenshin Cui on 14-3-16.
  6. //  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
  7. //
  8. #import "KCImageView.h"
  9. #define kImageCount 3
  10. @implementation KCImageView
  11. - (instancetype)initWithFrame:(CGRect)frame {
  12.    self = [super initWithFrame:frame];
  13.    if (self) {
  14.        self.image=[self getImage];
  15.    }
  16.    return self;
  17. }
  18. #pragma mark 设置控件可以成为第一响应者
  19. -(BOOL)canBecomeFirstResponder{
  20.    return YES;
  21. }
  22. #pragma mark 运动开始
  23. -(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
  24.    //这里只处理摇晃事件
  25.    if (motion==UIEventSubtypeMotionShake) {
  26.        self.image=[self getImage];
  27.    }
  28. }
  29. #pragma mark 运动结束
  30. -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
  31. }
  32. #pragma mark 随机取得图片
  33. -(UIImage *)getImage{
  34.    int index= arc4random()%kImageCount;
  35.    NSString *imageName=[NSString stringWithFormat:@"avatar%i.png",index];
  36.    UIImage *image=[UIImage imageNamed:imageName];
  37.    return image;
  38. }
  39. @end

KCShakeViewController.m

  1. //
  2. //  KCShakeViewController.m
  3. //  TouchEventAndGesture
  4. //
  5. //  Created by Kenshin Cui on 14-3-16.
  6. //  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
  7. //
  8. #import "KCShakeViewController.h"
  9. #import "KCImageView.h"
  10. @interface KCShakeViewController (){
  11.    KCImageView *_imageView;
  12. }
  13. @end
  14. @implementation KCShakeViewController
  15. - (void)viewDidLoad {
  16.    [super viewDidLoad];
  17. }
  18. #pragma mark 视图显示时让控件变成第一响应者
  19. -(void)viewDidAppear:(BOOL)animated{
  20.    _imageView=[[KCImageView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];
  21.    _imageView.userInteractionEnabled=true;
  22.    [self.view addSubview:_imageView];
  23.    [_imageView becomeFirstResponder];
  24. }
  25. #pragma mark 视图不显示时注销控件第一响应者的身份
  26. -(void)viewDidDisappear:(BOOL)animated{
  27.    [_imageView resignFirstResponder];
  28. }
  29. /*视图控制器的运动事件*/
  30. //-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
  31. //    NSLog(@"motion begin...");
  32. //}
  33. //
  34. //-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
  35. //    NSLog(@"motion end.");
  36. //}
  37. @end

运行效果(下图演示时使用了模拟器摇晃操作的快捷键,没有使用鼠标操作):

iOS开发系列之运动事件的更多相关文章

  1. iOS开发系列之远程控制事件

    在今天的文章中还剩下最后一类事件:远程控制,远程控制事件这里主要说的就是耳机线控操作.在前面的事件列表中,大家可以看到在iOS中和远程控制事件有关的只有一个- (void)remoteControlR ...

  2. iOS开发系列之触摸事件

    基础知识 三类事件中触摸事件在iOS中是最常用的事件,这里我们首先介绍触摸事件. 在下面的例子中定义一个KCImage,它继承于UIView,在KCImage中指定一个图片作为背景.定义一个视图控制器 ...

  3. iOS开发系列--让你的应用“动”起来

    --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...

  4. iOS开发系列--让你的应用“动”起来

    --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...

  5. IOS开发系列 --- 核心动画

    原始地址:http://www.cnblogs.com/kenshincui/p/3972100.html 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥i ...

  6. iOS开发系列--让你的应用“动”起来【转载】

    概览 原文链接:http://www.cnblogs.com/kenshincui/p/3972100.html 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥i ...

  7. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  8. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  9. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

随机推荐

  1. IS打包

    1. 目的 让用户可以通过运行一个安装程序,安装程序到系统中正常运行. 2. 注意 当我们用项目向导生成的新项目时,InstallShield只为我们生成两个事件,分别是OnFirstUIBefore ...

  2. 【技术宅11】php入门运算

    //1.空bool $a=''; $b=NULL; $c=false; $d=0; $e='0'; $f=array(); $g=array(array()); $h='NULL'; var_dump ...

  3. eval函数:分号的应用

    eval("echo'hello world';"); ("参数;") eval函数把参数当做php代码来执行,参数后要有分号,最后还要另加一个分号 相当于: ...

  4. PHP学习之中数组-遍历一维数组【2】

    在PHP学习之中数组[1]中学会怎么创建一个数组,如果PHP学习之中数组[1]中的元素多的话,我们访问元素又是一个问题了,下面我们就使用for语句while,foreach来遍历我们的数组: < ...

  5. 3.1决策树理论--python深度机器学习

    参考彭亮老师的视频教程:转载请注明出处及彭亮老师原创 视频教程: http://pan.baidu.com/s/1kVNe5EJ   0. 机器学习中分类和预测算法的评估:   准确率 速度 强壮行 ...

  6. Python 异常处理--raise函数用法

    raise语句手工引发一个异常: "raise" [expression ["," expression ["," expression]] ...

  7. OC-深浅复制

    [OC学习-26]对象的浅拷贝和深拷贝——关键在于属性是否可被拷贝 对象的拷贝分为浅拷贝和深拷贝, 浅拷贝就是只拷贝对象,但是属性不拷贝,拷贝出来的对象和原来的对象共用属性,即指向同一个属性地址. 深 ...

  8. iOS9 以上的真机调试 不用证书

    具体流程如下: 首次使用AppleID  的注意事项:  要在设置中 进行 如下操作  设置--通用--描述文件   ---添加信任 但是有时候  还是 会不能调试,  显示信息  是这样的   : ...

  9. unity NGUI点击消息不传入到场景中去

    unity NGUI点击消息不传入到场景中去 1.今天遇到的问题是点击NGUI的按钮,场景中也相应了这个消息 解决的办法是在场景中需要互动的时候,也就是在update中进行判断 是否是点击了NGUI按 ...

  10. Unity3D内存释放

    Unity3D内存释放 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resourc ...