Apple Watch 开发详解

Apple Watch 开发详解

Apple Watch如今对于第三方开发者来讲更多的仍是一块额外的屏幕。暂时WatchKit没有能给出足够的接口。如今Watch App的主要运算逻辑须要依赖iPhone,Apple也承诺会有原生的手表App,可能要等到Apple Watch和WatchKit的彻底版面世的时候。git

一、两种屏幕分辨率

屏幕尺寸 38mm 42mm
分辨率 272 x 340 312 x 390
宽高比 4:5 4:5

二、三种屏幕模式

主屏模式 Glance模式 通知模式
主界面 单屏即时信息页面 消息通知界面
可自定义布局,放置button等控件 全部信息必须在一屏内展现,不能有交互控件,点击进入Watch应用 有通知的时候唤起,可添加合适的按钮

三、两种通知显示方式

  • 两种显示模式
Short Look Long Look
查看屏幕上包含应用图标、名称、简单通知内容等信息 应用图标和名称将会移至屏幕顶端,内容占据主要的显示空间,佩戴者能够滑动来完成其它交互
  • 两种载入模式
static dynamic
直接载入 初始化interfaceController后载入

四、手势

只支持如下手势,不支持自定义手势github

手势 行为
纵向滑动 浏览内容
横向滑动 页面间切换
点按 选择内容
长按挤压 打开菜单
数字表冠 旋转,调整滚动速度
屏幕边缘向左扫 返回上一个界面
屏幕底部向上滑 打开Glance界面

五、 Watch App 架构

  • 一个完成的Watch应用由 WatchKit App 和 WatchKit Extension两部分组成,WatchKit App负责展现,安装在Watch上,WatchKit Extension负责业务和控制逻辑,安装在iPhone上。全部运算、逻辑以及控制都是在iPhone上完成。经过WatchKit通信
    图片名称数组

  • Watch App 控制流
    图片名称xcode

  • ViewController 生命周期
    图片名称缓存

6 、基础类

  • WKInterfaceController 至关于UIViewController 。生命周期方法分别是:架构

    -initWithContext: 被初始化时调用,通常在这里配置视图元素,至关于-viewDidLoad
    -willActivate 将要呈现的时候调用,也能够在这个方法中进行视图元素的设置,至关于-viewWillAppear
    -didDeactivate 呈现后调用,在这个方法中停用持有self的对象,如NSTimer。至关于-viewDidDisappearapp

  • WKInterfaceObject 及其子类布局

    WKInterfaceObject 至关于UIView的代理,WatchKit实际呈现的View对于开发者来讲是不可见的,只能经过WKInterfaceObject对UI对象属性进行设置,能够设置的属性很是少。学习成本并不大。
    WKInterfaceButton 至关于UIButton的代理
    WKInterfaceImage 至关于UIImageView的代理学习

WatchKit独立于UIKit,全部的类都继承自NSObject,没有完整的Response chain动画

七、UI开发

  • Watch App 的视图开发不能使用代码,必须StoryBoard

  • Watch App 采起的布局方式和 iOS App彻底不一样。不能使用 autoLayout或者坐标。只能使用相对布局。

    水平:left center right
    垂直:top center bottom

  • View Size可使用三种方式设置:

    Size To Fit Content : View的大小适应内容的大小

    Relative To Container : 相对容器设置自身大小

    Fixed :设置固定的宽高

  • WKInterfaceGroup 布局容器
    貌似其余的WKInterfaceObject子类对象都不能重叠,只有这个类能够同其余的WKInterfaceObject对象重叠布局。至关于Android的layout布局控件。

  • WKInterfaceTable 列表视图

    相对于UITableView,不须要设置delegate和dataSource。在初始化的时候直接设置行数和样式。

    经过-setNumberOfRows:withRowType:

    经过-rowControllerAtIndex:枚举每一个行进行设定。

    经过rowController设置cell样式,至关于UITableViewCell。rowController继承自NSObject,这点同其余WK组件不一样。显示逻辑须要在SB中设置,并绑定。细节看代码

    -(void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex 实现这个方法接受table的点击回调,不须要也没法设置delegate。

  • Menu 视图

    在SB中加入Context Menu,长按屏幕呼出。

    能够经过SB或者代码的方式设置Menu Item。上下文环境调用如下方法添加:

    -addMenuItemWithItemIcon:title:action:
    -addMenuItemWithImageNamed:title:action:
    -addMenuItemWithImage:title:action:
    -clearAllMenuItems

    除了用SB设置和以上方法外,没法获取WKInterfaceMenu和WKInterfaceMenuItem的实例或者代理。

  • WKInterfaceImage

    至关于UIImageView

    -setImageNamed: 获取Watch App的图片,注意这个图片必须存储在Watch App,手表本身的bundle里。Extension中的图片用这个方法是没法显示的。

    -setImage: -setImageData: 从Extension中获取图片,经过蓝牙传送到手表。

    能够经过WKInterfaceDevice 的 -addCachedImage:name: 方法将Extension中获取的图片缓存到手表中。每一个 app 的 cache 的尺寸大约是 20M,超过的话 WatchKit 将会从最老的数据开始删除,以腾出空间存储新的数据。

八、导航开发

  • 栈导航方式,相似UINavigationController。触碰左上角可返回

    -pushControllerWIthName:context: 第一个参数是Controller对应的Identifier字符串,在SB中设置。可经过content传递数据。

    -popController

    -popToRootController

  • modal方式。行为基本同UIKit同样,不一样的是触碰左上角可返回

    -presentControllerWithName:context:

    -dismissController

  • 分页导航。相似UIPageController。左右滑动切换

    -presentControllerWithNames:contexts: 传入 names 和 contexts数组,经过这种方式被呼出的 Controller 将以 page 导航方式呈现。

全部的导航方式均可以经过代码或者SB的方式实现。

九、其余

  • 不能执行须要权限的任务,例如在watch中请求位置权限
  • 不要在watch中进行后台任务
  • 不要在watch中执行复杂逻辑、耗时任务
  • watch中没法播放视频
  • cache尺寸只有20M
  • 传感器API未开放
  • 动画API未开放,用一组帧图片代替

十、 Demo

相关文章
相关标签/搜索