Apple Watch 1.0 开发介绍 1.3 简介 WatchKit App 架构
WatchKit app和WatchKit extension一起实现了app的界面。当用户在Apple Watch中操作时,WatchKit app从storyboards中选择合适的场景。比如,如果用户查看glance,它就会选择glance场景。在选择场景时,WatchKit通知对应的iPhone启动WatchKit extension来创建管理场景的对象。当常见完全配置好之后,它会显示在Apple Watch上。这种在WatchKit app和WatchKit extension中传递数据的操作完全是在幕后操作的。
下图显示了WatchKit app和WatchKit extension间的通讯。
管理场景:界面控制器
每个场景是由一个界面控制器对象来管理的, 它是WKInterfaceController类的实例。由于一次只在屏幕上显示一个界面,app展现新界面时会根据用户操作切换界面控制器。App可以模态界面。切换的类型也决定了界面如何展示。
注意:Glance和自定义通知界面使用特殊的界面控制器,它们和其他界面不同。
WatchKit App生命周期
用户的操作启动了app也决定了它的生命周期。用户从主屏启动app,查看glance或者查看通知界面。每个交互都会启动WatchKit app和对应的WatchKit extension。Watch app和WatchKit会一直传递信息指导用户停止操作app,这个时候iOS挂起estension知道下次用户操作。
在启动时,WatchKit为当前操作加载合适的场景。如果用户查看app的glance,WatchKit从storyboard中加载glance场景。如果用户直接启动app,WatchKit加载app的初始化场景。加载场景后,WatchKit通知WatchKit extension创建对应的界面控制器用来准备要展示的场景。下图展示了这个过程。
使用界面控制器的init和awakeWithContext:方法来加载需要的数据,设置对象的值,以及界面展示的准备工作。不要使用willActivate来初始化界面。willActivate方法只在将要显示的很短时间内调用,所以只能用这个方法做微笑的改变。比如,用这个方法来开始动画,或者开始只有界面显示时才执行的操作。
界面在屏幕上时,用户界面的操作会又界面控制器的自定义方法处理。当用户操作表格,按钮,开关等控件时,WatchKit会调用你的方法来响应。使用这些方法来更新界面以及执行相关的人物。如果要在其他时间执行任务,可以使用NSTimer来实现。
注意:Glance界面不支持事件方法。点击glance界面会启动app。
在用户操作Apple Watch时WatchKit extension会一直运行。Apple Watch的操作一般比较简短,所有界面控制器应该轻量并且不要执行长时间的任务。当用户退出app或者停止Apple Watch操作,iOS会停止界面控制器并且挂起WatchKit extension。如下图
App不同状态执行的不同任务
在app声明周期的不同状态,iOS会调用WKInterfaceController对象的方法来让它处理。下面的表格列出了基本上要实现的方法,以及他们是做什么的。
方法 | 执行的任务 |
init | 第一个初始化的机会 |
awakeWithContexxt: | 使用任何可用的数据配置界面控制器。使用它来加载数据,更新标签,图片,表格以及其他storyboard中的对象。context数据是配置新控制器时指定的。例如,在一个多层的界面中创建一个新界面时,会指定下一个界面要显示的context数据。建议提供context对象但是不是必须的。 |
willActive | 界面马上就要显示给用户了。这个方法中做一个界面小的改变。例如,用这个方法根据新数据改变标签内容。界面的初始化工作还是要在init和awakeWithContext:方法中做 |
didDeactivate | 使用这个方法来清理界面以及让界面进入静止状态。例如,使用这个方法来停止计时器以及停止动画。不能在这个方法中给界面对象设置值。从这个时候到willActivate调用之前,所有的试图改变界面值的方法都被无视了。 |
在模拟器上调试状态的代码
在测试中,可以锁定和解锁模拟器来确认activation喝deactivation代码是否按预期的工作。当使用Hardware>Lock命令来锁定模拟器,WatchKit会调用当前界面的didDeactivate方法。解锁模拟器的时候,WatchKit会调用willActivate。
和已有iOS app共享数据
如果iOS app和WatchKit extension依赖同样的数据,使用共享的app group来存储数据。App group是线程安全的。由于WatchKit extension和iOS app在不同的沙盒环境中,因此他们不能直接共享文件以及通讯。App group让两个进程可以共享文件和数据。
在iOS app和WatchKit extension工程的Capabilities tab中设置一个共享的app group。为每个target添加一个entitilements文件,向文件中添加一个com.apple.security.application-groups元素。所有的target需要选择同一个app group。
在运行时,通过读写共享的文件夹来共享数据。使用NSFileManager的containerURLForSecurityApplicationGroupIdentifier:方法来获取文件夹根地址。使用这个URL来枚举文件夹内容或者创建新的文件。
也可以用group id创建一个NSUserDefaults对象来共享数据。使用initWithSuiteName:方法创建的NSUserDefaults对象可以访问共享数据。iOS app和WatchKit extension都可以读写数据。
直接和iOS app通讯
app可以使用openParentAllication:reply:方法来向iOS app发送请求和接收响应。WatchKit extension不支持后台运行模式。他们只在用户操作Apple Watch时运行。iOS app没有那么多限制,他们可以被配置为在后台运行来为WatchKit extension获取数据。有些活动可能需要一些时间才能完成,比如获取用户的位置,应该由iOS app来完成然后把数据传给WatchKit extension。
当调用openParentApplication:reply:方法时,iOS在后台启动或唤醒app然后调用app delegate的application:handleWatchKitEctensionRequest:reply:方法。App delegate通过提供的信息执行操作然后把结果返回给WatchKit extension。
Apple Watch 1.0 开发介绍 1.3 简介 WatchKit App 架构的更多相关文章
- Apple Watch 1.0 开发介绍 1.2 简介 配置Xcode工程
WatchKit app需要一个现有的iOS app.在iOS app工程中,添加一个新的WatchKit app target,它包含了WatchKit app和WatchKit extension ...
- Apple Watch 1.0 开发介绍 1.4 简介 使用iOS技术
WatchKit extension可以使用iOS app同样的技术,但是由于他是extension,使用有些技术的时候会有限制,有些不推荐使用.下面是一些介绍以及什么时候使用什么技术: 有些需要权限 ...
- Apple Watch 1.0 开发介绍 1.1 简介 开发苹果手表
使用Apple Watch,用户可以使用一种不显眼的方式查看信息.不用把iPhone从口袋里拿出来,就可以通过看一下手表快速获得重要信息. 作为Apple Watch的第三方app开发者,应该通过使用 ...
- Apple Watch 1.0 开发介绍 2.1 WatchKit Apps UI要点
实现app的开始是定义storyboard场景.每个场景定义了app的一部分界面.可以为不同的尺寸自定义场景. 组装storyboard界面 WatchKit app和iOS app的布局模式不同.组 ...
- 关于Apple Watch,听听开发了两个月Watch App的工程师怎么说
今年1月份有幸应苹果邀请,秘密参与苹果 Watch App 的真机现场调试.4月份,Apple Watch 会正式上市.在这之前,也算是亲自抢先体验了 Apple Watch,以及开发了一下 Watc ...
- android 蓝牙4.0 开发介绍
最近一直在研究一个蓝牙功能 由于本人是菜鸟 学起来比较忙 一直搞了好久才弄懂 , 网上对蓝牙4.0也就是几个个dome 抄来抄去,全是英文注解 , 对英语不好的朋友来说 真是硬伤 , 一些没必要的描 ...
- 从0开发3D引擎(补充):介绍领域驱动设计
我们使用领域驱动设计(英文缩写为DDD)的方法来设计引擎,在引擎开发的过程中,领域模型会不断地演化. 本文介绍本系列使用的领域驱动设计思想的相关概念和知识点,给出了相关的资料. 上一篇博文 从0开发3 ...
- 从0开发3D引擎(二):准备预备知识
大家好,本文介绍了开发3D引擎需要的预备知识,给出了相关的资源. 上一篇博文 从0开发3D引擎(一):开篇 了解Web 3D Web 3D的历史 目前Web 3D是基于WebGL这个Web端3D AP ...
- 从零开始编写自己的C#框架(6)——SubSonic3.0插件介绍(附源码)
前面几章主要是概念性的东西为主,向初学者们介绍项目开始前的一些知识与内容,从本章开始将会进入实操阶段,希望跟着本系统学习的朋友认真按说明做好每一步操作(对于代码最好是直接照着文档内容在你的IDE中打一 ...
随机推荐
- 不错的C++框架: Thrift(2)-传输和网络相关
不错的C++框架: Thrift(2)-传输和网络相关 - ang639 - 博客频道 - CSDN.NET 不错的C++框架: Thrift(2)-传输和网络相关
- 《C/C++专项练习》 — (3)
序 第三次C/C++专项.嗯,要抗住打击,继续加油~ 错题分析与总结 1 . 在64位系统中.有例如以下类: class A { public: void *p1; private: void *p2 ...
- hdu3602(变形背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3602 题意是:N个国家,M个飞船,每个国家有人数num,如果上飞船就给联合国value钱,选出某些国家 ...
- 【剑指offer】复制的复杂链条
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26154691 题目描写叙述: 输入一个复杂链表(每一个节点中有节点值,以及两个指针,一个指 ...
- SE 2014年4月22日(二)
如图配置: 网络中存在三个公有AS 其中AS200使用了 BGP联盟技术(如图配置) 在AS 100 中R1上起源了四条BGP路由,(1)要求全网BGP设备均能够正常学习 (2)要求:(使用BGP团体 ...
- 经典回忆Effective C++ 1
c++ 联邦语言: typedef { unit C; unit Object-Oriented C++; unit Template C++; unit STL; }; notice: C++高效编 ...
- Luci - UCI (Unified Configuration Interface)
参考: http://wiki.openwrt.org/doc/techref/uc http://luci.subsignal.org/api/luci/modules/luci.model.uci ...
- Codeforces Round #253 (Div. 1) (A, B, C)
Codeforces Round #253 (Div. 1) 题目链接 A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来. 思路:一共2^10种情况,直接暴力枚举,然 ...
- 安装pygame
pygame的安装 我们首先要去到:http://www.pygame.org/download.shtml 下载我们所需要的软件包: 我选择的是:pygame-1.9.2a0.win32-py3.2 ...
- Kendo UI开发教程(16): Kendo MVVM 数据绑定(五) Events
本篇和Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click类似,为事件绑定的一般形式.Events绑定支持将ViewModel的方法绑定到DOM元素的事件处理(如鼠标事 ...