Apple Watch 开发详解

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

1、两种屏幕分辨率

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

2、三种屏幕模式

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

3、两种通知显示方式

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

4、手势

只支持以下手势,不支持自定义手势

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

5、 Watch App 架构

  • 一个完成的Watch应用由 WatchKit App 和 WatchKit Extension两部分组成,WatchKit App负责展示,安装在Watch上,WatchKit Extension负责业务和控制逻辑,安装在iPhone上。所有运算、逻辑以及控制都是在iPhone上完成。通过WatchKit通讯

  • Watch App 控制流

  • ViewController 生命周期

6 、基础类

  • WKInterfaceController 相当于UIViewController 。生命周期方法分别是:

    -initWithContext: 被初始化时调用,一般在这里配置视图元素,相当于-viewDidLoad
    -willActivate 将要呈现的时候调用,也可以在这个方法中进行视图元素的设置,相当于-viewWillAppear
    -didDeactivate 呈现后调用,在这个方法中停用持有self的对象,如NSTimer。相当于-viewDidDisappear

  • WKInterfaceObject 及其子类

    WKInterfaceObject 相当于UIView的代理,WatchKit实际呈现的View对于开发者来说是不可见的,只能通过WKInterfaceObject对UI对象属性进行设置,可以设置的属性非常少。学习成本并不大。
    WKInterfaceButton 相当于UIButton的代理
    WKInterfaceImage 相当于UIImageView的代理

WatchKit独立于UIKit,所有的类都继承自NSObject,没有完整的Response chain

7、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 将会从最老的数据开始删除,以腾出空间存储新的数据。

8、导航开发

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

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

    -popController

    -popToRootController

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

    -presentControllerWithName:context:

    -dismissController

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

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

所有的导航方式都可以通过代码或者SB的方式实现。

9、其他

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

10、 Demo

Apple Watch 开发详解的更多相关文章

  1. [转载]Apple Watch 开发详解

    Apple Watch 开发详解 Apple Watch现在对于第三方开发者来说更多的还是一块额外的屏幕.暂时WatchKit没有能给出足够的接口.现在Watch App的主要运算逻辑需要依赖iPho ...

  2. iOS原生地图开发详解

    在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...

  3. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  4. 基于H5的微信支付开发详解

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  5. ****基于H5的微信支付开发详解[转]

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  6. 【转发】NPAPI开发详解,Windows版

    NPAPI开发详解,Windows版 9 jiaofeng601, +479 9人支持,来自Meteor.猪爪.hanyuxinting更多 .是非黑白 .Yuan Xulei.hyolin.Andy ...

  7. 热烈祝贺华清远见《ARM处理器开发详解》第2版正式出版

    2014年6月,由华清远见研发中心组织多名业 内顶尖讲师编写的<ARM处理器开发详解>一书正式出版.本书以S5PV210处理器为平台,详细介绍了嵌入式系统开发的各个主要环节,并注重实践,辅 ...

  8. 嵌入式Linux应用程序开发详解------(创建守护进程)

    嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...

  9. wpf 客户端【JDAgent桌面助手】开发详解(四) popup控件的win8.0的bug

    目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]详解(一)主窗口 圆形菜单... wpf 客 ...

随机推荐

  1. Luogu3297 SDOI2013逃考(半平面交+最短路)

    把每个人的监视范围看成点,相邻的两个监视范围连边,那么跑一遍最短路就可以了(事实上边权都为1可以直接bfs).显然存在最优路线没有某个时刻同时被多于两人监视,要到达另一个区域的话完全可以经过分界线而不 ...

  2. Arif in Dhaka (First Love Part 2) UVA - 10294(Polya定理)

    这题和POJ-1286一样 题意: 给出t种颜色的n颗珠子 (每种颜色的珠子个数无限制,但总数必须是n), 求能制作出项链和手镯的个数 注意手镯可以翻转和旋转  而 项练只能旋转 解析: 注意Poly ...

  3. MT【58】反演圆和极线极点和谐统一

    解答:如图 评:1.反演圆及其性质介绍: 评2:此题的源头是1995年全国卷压轴题,这里用极线极点的相关性质也可以处理: 注:用相关点法很容易得到轨迹.

  4. BZOJ5312 冒险(势能线段树)

    BZOJ题目传送门 表示蒟蒻并不能一眼看出来这是个势能线段树. 不过仔细想想也并非难以理解,感性理解一下,在一个区间里又与又或,那么本来不相同的位也会渐渐相同,线段树每个叶子节点最多修改\(\log ...

  5. hihoCoder#1743:K-偏差排列(矩阵快速幂+状压dp)

    题意 如果一个 \(1\to N\) 的排列 \(P=[P_1, P_2, ... P_N]\) 中的任意元素 \(P_i\) 都满足 \(|P_i-i| ≤ K\) ,我们就称 \(P\) 是 \( ...

  6. 自学Linux Shell1.2-Linux目录结构

    点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /:  根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...

  7. 自学Python2.1-基本数据类型-字符串方法 下

    自学Python之路 自学Python2.1-基本数据类型-字符串方法 下 class str(object): """ str(object='') -> str ...

  8. TextView 借助Linkify,使用自定义模式设置链接

    http://my.oschina.net/fengheju/blog/176105 TextView是android中的一个比较常用的控件,它有一个非常有趣的特性,可以通过android:autoL ...

  9. SDL_BlitSurface

    SDL_BlitSurface Use this function to perform a fast surface copy to a destination surface. Contents ...

  10. Asp: 解决脚本输出网页出现乱码情况

    很久没碰asp,都有点生疏了,唉... 今天写一个小程序,发现网页静态部分输出不会乱码,asp脚本部分输出在360浏览器上会显示乱码,但在firefox和chrome上测试却不会显示乱码,我已经在代码 ...