Glance在英语中的字面意思是(一瞥;一滑;闪光),由此可见在WatchKit的UI体系中,Glance担负的任务是为用户提供实时快捷,简单明了的信息获取窗口。对Watch app来说,Glance是可选项,开发者可以选择性的对其进行实现。

一、特性

  • 唯一性:一个APP只允许有一个Glance控制器
  • 实时性:及时更新Glance,以避免Glance展示出过期信息
  • 聚焦性:在Glance上永远都只展示最重要的数据
  • 只读性:Glance是只读的,不能与用户操作进行交互
  • 基于模板:Glance是基于模板设计的,且Glance的界面范围仅限于单个屏幕

二、生命周期

Glance界面控制器的生命周期和其他WatchKit界面控制器类似,不过Glance的界面控制器的初始化要更早,以便于Glance能快速的显示给用户。为确保展示的信息是最新的,需要在willActivate方法中包含检查方法,以避免Glance展示出过时的信息。
在WatchKit的启动顺序链中,WatchKit会自动针对当前的场景创建适用的controller,如果用户正在查看弹出的Glance,则创建Glance关联的controller;如果用户直接启动watch app,则WatchKit会从storyboard中载入对应的初始化controller。
  
以上controller均由一个WKInterfaceController的子类进行管理,以下是其关键方法:

方法名 作用
initWithContext: controller初始化方法
willActivate UI加载完毕后调用
didDeactivate watch app运行完毕即将失效前调用

注意:一旦willActivate被调用,则controller中的所有属性操作都将变得不可用,因此不能在willActivate中进行属性设置。(使timer无效化或者停止动画之类的操作是可以的)

三、Glance界面

1.接入点

EntryPoint,与传统iOS App在stroyboard中的表现类似,在增加WatchKit的target,并包含Glance之后,storyboard将会为Glance准备好UI界面与接入点。

2.Glance Interface Controller

Glance对应的Glance Interface Controller是WKInterfaceController的子类,其主要功能是为Glance配置布局,因此其实现也非常简单,主要包括以下两个方法:

  1. initWithContext:用于初始化Glance
  2. willActivate:用于更新Glance的UI界面

当需要改动已经展示在屏幕上的UI元素时,我们可以使用NSTimer对象,或使用WatchKit中新加入的如WKInterfaceDatWKInterfaceTimer等对象来对时间和计时进行操作。

3.自定义Glance启动界面

在WatchKit中,当用户点击弹出的Glance时默认为打开Watch App并展示main interface controller管理的界面。我们可以在Glance的controller中调用updateUserActivity:userInfo:方法,自定义从Glance启动后Watch app展示的界面,方法如下:

  1. glance interface controller
  • 实现initWithContext:willActivate方法。
  • 调用updateUserActivity:userInfo:方法,传入userInfo参数。
  1. main interface controller
  • 实现actionForUserActivity:context:方法,根据传入的userInfo参数展示对应的interface controller,生产一个comtex对象并把它传入interface controller。

4.其他注意事项

  • Glance底部区域是留给页面指示器圆点的。