Watch Kit 初探

很荣幸的在4月24日第一批收到了Apple Watch。

于是开始着手开始研究Watch Kit,  但现在才有时间写出这篇文章不知是否有些晚。

 

Watch App 的运行机制

在Xcode中添加Target,选择Watch App。 然后会发现多出来了两个Target 分别是WatchKit Extension 和 WatchKit App. 

WatchKit Extension 是运行在iPhone上的WatchKit App的辅助程序,主要用来处理事件数据。
WatchKit App       运行在Apple Watch上实际程序,用于展示。
Watch App 的加载机制

 

WatchKit 的 Interface Controller 的生命周期

 

 

Watch App 支持的控件 (WKInterface)

考虑到可共享和分享的目标,WatchKit 具有和 UIKit 惊人的相似,这一点也不令人吃惊。手表不同于手机和平板电脑,他们放在桌面上并不相同。一些概念是可以共用的,但是每一个概念都会有自己独特的目的和限制,以形成他们自己的软件轮廓。

为了对比,这张表格怎么依据 UIKit / Cocoa 的概念去理解WatchKit。

WatchKit UIKit
WKInterfaceController UIViewController
WKUserNotificationInterfaceController UIApplicationDelegate + UIAlertController
WKInterfaceDevice UIDevice
WKInterfaceObject UIView
WKInterfaceButton UIButton
WKInterfaceDate UILabel + NSDateFormatter
WKInterfaceGroup UIScrollView
WKInterfaceImage UIImageView
WKInterfaceLabel UILabel
WKInterfaceMap MKMapView
WKInterfaceSeparator UITableView.separatorColor / .separatorStyle
WKInterfaceSlider UIStepper + UISlider
WKInterfaceSwitch UISwitch
WKInterfaceTable UITableView
WKInterfaceTimer UILabel + NSDateFormatter + NSTimer

 

 

其中这些UI控件的交互方式有别于之前iOS/Mac开发中的传递sender

– (IBAction)buttonPress:(id)sender;

在WatchApp中,传递Sender是不可行的。 sender 会为 nil

Apple对于这些可操控控件做了严格的限制。  不同类型的控件只能触发其相应的selector

具体规则如下表:

Object Action Method
Button - (IBAction)doButtonAction
Switch - (IBAction)doSwitchAction:(BOOL)on
Slider - (IBAction)doSliderAction:(float)value
Table - (IBAction)doTableRowTapAction:(NSInteger)rowIndex
Menu Item - (IBAction)doMenuItemAction 

为了更小, 关闭了控制器的状态集合, 这种方法更加的吸引人—比起输入 UIControlEventTouchUpInside 更加优秀。

 

 

 

 

Watch App 的布局方式

对于习惯于代码生成View然后addSubview的同胞们, 我可以很遗憾的告诉你们。在AppleWatchApp上不允许使用代码addSubview了。 最显著的不同是WKInterface没有了 frame 。 取而代之的是手动的指定坐标点和设置自动布局适应,WatchKit interface objects 在网隔里根据边缘和各自的顺序布局,就好像过去使用 CSS 的框架工作。

 

所以所有的布局方式需要通过InterfaceBuilder来添加View,并且必须使用WatchKit自带的专属自动布局方式(非Autolayout)。

Interface Builder自动布局

 

在上图中的Position里面可以设置Horizontal (横向) “左对齐”、“右对齐”和“居中”。Vertical (纵向) “靠上”、“居中”和“靠下”。

具体的位置系统会自动紧贴住一次排版。 可自定义性并不强。  也没有View嵌套类似的功能(Group不再讨论范围)。

 

另外还有一点必须提到的是, 所有的数据处理都是在iPhone端完成的,然后WatchOS只负责更新UI。 这样就导致所有的用户点击操作都会有0.5-1s的延迟。 这也是为了让Watch更加省电 不得已而为之的吧。

 

 

最后 因为开发时间有限, 我制作的隐藏文件利器 HideCalculator 已经添加了对AppleWatch的支持 并且已经通过审核上架AppStore。

Link: https://itunes.apple.com/us/app/photo+video-hide-calculator/id489508891?mt=8

欢迎尝试~ 并留下您宝贵的意见~

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*