美文网首页
 Watch开发学习 (四)

 Watch开发学习 (四)

作者: BBH_Life | 来源:发表于2016-05-30 15:37 被阅读270次

    WatchOS App架构与更新 (WatchOS 2)

    前言

    WatchOS2出现后,改变了很多东西:

    • 其中最大的改变也是最充满想象力的改变是将WatchKit Extension直接从iPhone移植到了AppleWatch上,所以这就给了AppleWatch原生App开发的基础。
    • 同时iOS APP与Watch App沟通也有一个Aplle推出的WatchConnectivityframework,其中提供了一个类WCSession作为两者沟通桥梁,既可以传输String,Dictionary,Array等,还可以共享文件。
    • 而且WatchOS2提供了NSUrlSession拉取网络数据,这表示WatchAPP可以独立访问网络,加之其可以连接WIFI的硬件,其实Watch对iPhone的依赖性减弱了很多
    • WatchOS2中不能使用iCloud,只能发还数据给iPhone,iOS再使用iCloud

    WatchOS 2的架构

    从上面的图中,可以很明显地看出,苹果把原来运行在 iPhone 手机上的 WatchKit Extension 移到 Apple Watch 中了。这将直接带来如下改变:原来只存放一些资源和 Storyboard 的 Watch App,现在程序的业务逻辑部分(也就是代码执行部分)也被放到 Watch App 中。这样的话,程序给用户的体验会更好,Watch App 的运行可以完全独立于 iPhone 了。值得注意的是,Apple Watch 2 中还支持 WiFi,所以 Apple Watch 可以通过 WiFi,直接获取一些网络数据等。并且 Apple Watch 无法处理的一些业务,可以通过 Connectivity 框架,请求 iPhone 进行处理,并将结果返回给 Apple Watch。

    WatchOS 2的生命周期

    用户对AppleWatch的操作控制了你的App的启动和生命周期。用户可以通过Home界面,Glance界面和表盘的Complication与通知Notification启动你的APP。每一个这样的操作都会启动你的WatchApp 和WatchAKit Extension。自此开始WatchAPP和WatchKit Extension开始传递信息和工作,直到用户停止与你WatchAPP的交互,这时候iOS会挂起WatchKit Extension。

    下图是WatchApp Launching的过程
    以及一个InterfaceController的生命周期
    在ExtensionDelegate中会有WatchAPP的状态监听
    WatchAPP的状态变化如下图

    Watch Connectivity

    你可以通过WatchConnectivityframework来实现watch与配对iPhone上的文件和数据的来回传输。如果这两个apps是在前台上运行,则通信是实时的,否则通信会被转移到后台,直至接收数据的一方启动进入前台的时候才转移回来。

    在这个新框架的主要成员是WCSession,它负责处理了两个设备之间的所有通信。你不需要自己去创建这个类的实例对象,只需要使用defaultSession单例对象就可以了。

    要启动和运行WCSession,你需要指定一个对象去遵从WCSessionDelegate,分配给WCSession的委托属性并调用activateSession()。如果你打算频繁的使用WatchConnectivity的话,我强烈建议你尽可能在apps的早期生命周期完成这个设置。

    这里贴出WCSession的一些代码和解释:(只支持iOS9及更新版本,在ContainerApp和Extension中使用一致)
    @interface WCSession : NSObject

    硬件是否支持:+ (BOOL)isSupported;

    单例对象:+ (WCSession *)defaultSession;

    拥有的Delegate:@property (nonatomic, weak, nullable) id <WCSessionDelegate> delegate;(在这里需要)

    delegate中使用较多的有:(接收信息后的一些处理)
    - (void)session:(WCSession * ) session didReceiveMessage:(NSDictionary<NSString * , id> *)message;
    - (void)session:(WCSession * )session didReceiveMessage:(NSDictionary<NSString * , id> * )message replyHandler:(void(^)(NSDictionary<NSString * , id> *replyMessage))replyHandler;

    激活对象:- (void)activateSession;(在APP生命周期中激活越早越好)

    发送信息:
    - (void)sendMessage:(NSDictionary<NSString *, id> *)message replyHandler:(nullable void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;
    - (void)sendMessageData:(NSData *)data replyHandler:(nullable void (^)(NSData *replyMessageData))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;

    一般的使用过程:
    if ([WCSession isSupported]) { WCSession *session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; } //接下来开始send或者receive

    动画(Animation)

    WatchKit还可以用之前那样原始方式通过轮询处理好的图片组去运行动画,不过WKInterfaceController现在通过animateWithDuration(_:animations:)提供了更接近于iOS的基础动画。只需要持续时间和block,就可以在设定的持续时间里执行block里面的动画。例如:

    animateWithDuration(1){()->Voidin
    self.label.setHorizontalAlignment(.Left)
    self.label.setAlpha(0)
    }
    

    你可以通过更改以下WKInterfaceObject属性来设置动画:

    • 透明度
    • 宽高
    • 垂直和水平位置
    • 背景颜色
    • 布局组中的插入

    访问更多硬件(MoreAccessToTheHardWare)

    watchOS2提供了很多硬件设备和传感器,包括电子表冠DigitalCrown,振动引擎TapticEngine,心率传感器heartratesensor,加速计accelerometer以及麦克风microphone等。

    新接口对象(NewInterfaceObjects)

    苹果在这个版本的WatchKit里推出了一个全新的接口对象:WKInterfacePicker,它是个通过电子表冠来进行交互的滚动列表。在WKInterfacePicker中的物品(item)可以是文本、图像、或是图文混合。当用户选择了里面的物品,WatchKit调用WKInterfacePicker中的方法来传递选择了的索引。

    WKInterfacePicker可以通过三种不同风格来展示:

    • List:把物品垂直排列显示的列表。
    • Stacked:将要展示的物品转为一叠卡片通过滚动电子表冠来一张张显示。
    • ImageSequence:从图像序列中抽出单个图像展示。

    说到接口控制器,WKInterfaceController现在提供了让你直接弹出alerts和actionsheets的方法。

    调用presentAlertControllerWithTitle(_:message:preferredStyle:actions:)在当前的接口控制器弹出一个alert或是actionsheet。根据你设定的preferredStyle参数来显示出不同的样式。其中的actions参数是包含WKAlertAction实例的数组,通过用户点击相应的button来执行它自身提供的block。

    自定义Widgets

    自定义数字附件是围绕家族概念构建的,每个家族提供一个或多个模板,你可以把你的数字附件子类化后,再通过这些模板实现。

    有五种直接实现的数字附件:

    • Modular:这家族有small,large两个分类,并且他们都能通过模块watch界面上看到。
    • Circular:只有small分类,在简约watch界面上看到。
    • Utilitarian:和Modular一样有small,large两款在实用watch界面上看到.


    如果你没有AppleWatch或是对watch界面类型不熟悉可以看指南了解,里面也提到过怎么实现Custom Complications(自定义数字附件)。也可以从watchOS 2 Transition Guide的Providing Custom Complications部分查看更多关于编译Custom Complications的细节。

    相关文章

      网友评论

          本文标题: Watch开发学习 (四)

          本文链接:https://www.haomeiwen.com/subject/ctqcdttx.html