前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别,下面我们简单介绍一下运动事件。在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. Caesar

    要求实现用户输入一个数改变26个字母的排列顺序 例如输入3: DEFGHIJKLMNOPQRSTUVWXYZABC 输入-3: XYZABCDEFGHIJKLMNOPQRSTUVW 使用循环链表 代码 ...

  2. SignalR实现B/S系统对windows服务运行状态的监测

    基于SignalR实现B/S系统对windows服务运行状态的监测 通常来讲一个BS项目肯定不止单独的一个BS应用,可能涉及到很多后台服务来支持BS的运行,特别是针对耗时较长的某些任务来说,Windo ...

  3. CSS HACK的方法

    所有浏览器 通用 height: 100px; IE6 专用 _height: 100px; IE7 专用 *+height: 100px; IE6.IE7 共用 *height: 100px; IE ...

  4. zip file 压缩文件

    有时候我们希望 upload 文件后自动压缩, 可以节省空间. 可以使用微软提供的压缩代码 Install-Package System.IO.Compression.ZipFile -Version ...

  5. 具有 Button 风格的 Panel(覆盖TCustomPanel的Paint函数,用到了ThemeServices)

    unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  6. Android Wear开发 - 数据通讯 - 第一节 : 连接数据层

    http://developer.android.com/training/wearables/data-layer/accessing.html Accessing the Wearable Dat ...

  7. Volatile vs. Interlocked vs. lock

    今天在stackoverflow上看到一个关于Volatile, Interlock, Lock的问题,发现回答的特别好,所以就想到把它翻译一下, 希望给那些对它们有疑惑的人提供点帮助 :假设有一个类 ...

  8. fdisk磁盘分区

    http://www.cr173.com/html/4336_1.html http://www.51cto.com/art/200602/20328.htm

  9. vijos1514天才的记忆

    P1514天才的记忆 背景 神仙飞啊飞 描述 从前有个人名叫W and N and B,他有着天才般的记忆力,他珍藏了许多许多的宝藏.在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻松 ...

  10. HDU 1495 非常可乐 BFS 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...