《iOS 6高级开发手册(第4版)》——1.12节使用运动事件检测晃动

1.12 使用运动事件检测晃动
iOS 6高级开发手册(第4版)
当iPhone检测到一个运动事件时,它会把该事件传递给当前的第一个响应者,即响应者链中的主对象。响应者是可以处理事件的对象,所有的视图和窗口都是响应者,因此也是应用程序对象。

响应者链提供了一种对象层次结构,所有的对象都可以响应事件。当朝向链开始处的对象接收到一个事件时,不会进一步传递那个事件。对象会处理它。如果它不能处理,可以把该事件转移给下一个响应者。

对象通常可以通过把它们自己声明为第一个响应者来获得这种身份,这是通过become FirstResponder实现的。在这个代码段中,UIViewController确保它会变成第一个响应者,只要它的视图出现在屏幕上即可。一旦消失,它将放弃第一个响应者的身份:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

// Become first responder whenever the view appears
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

// Resign first responder whenever the view disappears
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self resignFirstResponder];
}

第一个响应者将接收所有的触摸和运动事件。运动回调反映了UIView触摸回调阶段。回调方法如下。

motionBegan:withEvent::这个回调指示运动事件的开始。在编写本书时,只能识别一类运动事件:晃动。将来可能不是这样,因此你可能想在代码中检查运动类型。
motionEnded:withEvent::在第一个响应者在运动事件结束时接收这个回调。
motionCancelled:withEvent::与触摸一样,可以通过打入的电话和其他系统事件取消运动。Apple建议在代码中实现全部3个运动事件回调(类似地,还要实现全部4个触摸事件回调)。
下面的代码段显示了一对运动回调的示例。如果在设备上测试它们,可以注意到几件事。第一,从用户的角度看,开始和结束事件几乎是同时发生的,为这两类事件播放声音有些小题大做。第二,它偏向于进行从一侧到另一侧的晃动检测,与前后和上下晃动相比,iPhone更擅长检测从一侧到另一侧的晃动。最后,Apple的运动实现使用了一种轻微锁定的方法。直到生成了另一个运动事件或者在处理了前一个运动事件之后,才能生成一个新的运动事件。Shake to Shuffle和Shake to Undo事件使用了相同的锁定机制:

- (void)motionBegan:(UIEventSubtype)motion
    withEvent:(UIEvent *)event {

    // Play a sound whenever a shake motion starts
    if (motion != UIEventSubtypeMotionShake) return;
    [self playSound:startSound];
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    // Play a sound whenever a shake motion ends
    if (motion != UIEventSubtypeMotionShake) return;
    [self playSound:endSound];
}
时间: 2024-09-16 14:47:43

《iOS 6高级开发手册(第4版)》——1.12节使用运动事件检测晃动的相关文章

《iOS 6高级开发手册(第4版)》——导读

目 录 第 1 章 特定于设备的开发 1.1 访问基本的设备信息1.2 添加设备能力限制 1.3 秘诀:检查设备接近度和电池状态1.4 秘诀:取回额外的设备信息 1.5 秘诀:使用加速能力"向上"定位 1.6 处理基本的方向1.7 同步获取当前的加速计角度 1.8 使用加速度移动屏幕上的对象 1.9 秘诀:基于加速计的滚动视图 1.10 秘诀:Core Motion基础 1.11 秘诀:获取和使用设备姿势 1.12 使用运动事件检测晃动 1.13 使用外部屏幕 1.14 跟踪用户 1.

《iOS 6高级开发手册(第4版)》——1.4节秘诀:取回额外的设备信息

1.4 秘诀:取回额外的设备信息 iOS 6高级开发手册(第4版) sysctl()和sysctlbyname()允许获取系统信息.这些标准的UNIX函数用于询问操作系统有关硬件和OS的详细信息.看一眼Macintosh上的/usr/include/sys/sysctl.h包括文件,就能对所提供的范围类型有一个感觉.在那里,能够找到一份可以用作这些函数的参数常量的详尽列表. 这些常量使你能够检查核心信息,比如系统的CPU频率.可用的内存量等.秘诀1-2演示了这种功能.它引入了一个UIDevice

《iOS 6高级开发手册(第4版)》——2.8节秘诀:声明文档支持

2.8 秘诀:声明文档支持 iOS 6高级开发手册(第4版) 应用程序文档并不仅限于它们创建或者从Internet下载的文件.如你在前一个秘诀中所发现的,应用程序可能处理某些文件类型.它们可能打开从其他应用程序传递过来的项目.你已经从发送方的角度见过了文档共享,它使用"open in"(打开在)控制器把文件导出到其他应用程序.现在应该从接收方的角度探讨它. 应用程序在它们的Info.plist属性列表中声明它们对某些文件类型的支持.Launch Services(启动服务)系统将读取该

《iOS 6高级开发手册(第4版)》——2.5节秘诀:Quick Look预览控制器

2.5 秘诀:Quick Look预览控制器 iOS 6高级开发手册(第4版) Quick Look预览控制器类允许用户预览许多文档类型.这个控制器支持文本.图像.PDF.RTF.iWork文件.Microsoft Office文档(Office 97及更高版本,包括doc.ppt.xls等)和逗号分隔的值(comma-separated value,csv)文件.你提供一种受支持的文件类型,Quick Look控制器将为用户显示它.集成的系统提供的活动视图控制器有助于共享预览的文档,如图2-6

《iOS 6高级开发手册(第4版)》——2.9节秘诀:创建基于URL的服务

2.9 秘诀:创建基于URL的服务 iOS 6高级开发手册(第4版) Apple的内置应用程序提供了多种可以通过URL调用访问的服务.可以要求Safari打开Web页面,让Maps显示一幅地图,或者使用mailto:风格的URL开始在Mail中撰写一封信件.URL模式指出现在冒号之前的URL的第一部分,比如http或ftp. 这些服务可以工作,因为iOS知道如何将URL模式匹配到应用程序.以http:开头的URL将在Mobile Safari中打开.mailto:URL总会链接到Mail.你可能

《iOS 6高级开发手册(第4版)》——1.2节添加设备能力限制

1.2 添加设备能力限制 iOS 6高级开发手册(第4版) 应用程序的Info.plist属性列表使你能够在向iTunes提交应用程序时指定应用程序的要求.这些限制允许告诉iTunes应用程序需要哪些设备特性. 每个iOS单元都会提供一个独特的特性集.一些设备会提供照相机和GPS能力,另外一些则不会.一些设备具有机载陀螺仪.自动聚焦,以及其他强大的选项.你可以指定在设备上运行应用程序时需要哪些特性. 在Info.plist文件中包括UIRequiredDeviceCapabilities键时,i

《iOS 6高级开发手册(第4版)》——2.3节秘诀:监测Documents文件夹

2.3 秘诀:监测Documents文件夹 iOS 6高级开发手册(第4版) iOS文档并没有受困在它们的沙盒中,你可以并且应该与用户共享它们.应该允许用户直接控制他们的文档,以及访问他们可能在设备上创建的任何资料.一个简单的Info.plist设置将使iTunes能够显示用户的Documents文件夹的内容,并使那些用户能够根据需要添加和删除资料. 在将来某个时间,你可能使用一个简单的NSMetadataQuery监测器来监视Documents文件夹并报告更新.在编写本书时,元数据监视还没有扩

《iOS 6高级开发手册(第4版)》——1.14节跟踪用户

1.14 跟踪用户 iOS 6高级开发手册(第4版) 跟踪是开发者的一种不幸的现实生活.Apple不赞成使用UIDevice属性,该属性提供了绑定到设备硬件的唯一标识符.Apple利用两个标识符属性取代UIDevice属性.它使用identifierForAdvertising属性返回当前设备所独有的一个特定于设备的字符串,并使用identifierForVendor属性提供一个绑定到每位应用程序供应商的字符串.无论使用的是哪个应用程序,这都应该会返回相同的唯一字符串,它不是顾客id.不同设备上

《iOS 6高级开发手册(第4版)》——2.7节秘诀:使用文档交互控制器

2.7 秘诀:使用文档交互控制器 iOS 6高级开发手册(第4版) UIDocumentInteractionController类允许应用程序给用户展示一个选项菜单,允许他们以各种方式使用文档文件,利用这个类,用户可以利用以下特性. iOS应用程序之间的文档共享(即"在某个应用程序中打开这个文档"). 使用QuickLook进行文档预览. 活动控制器选项,比如打印.共享和社交网络. 你已经在本章前面的动作中见过后两种特性.文档交互类在这些特性顶部添加了应用程序间的共享,如图2-7所示