Apple Watch API的功能

1.IWatch 的API

2.API的功能

3.通讯机制

4.UI

1.watch的API及功能

WatchKit 框架

WKInterfaceController

生命周期

//初始化watch的UI,生成对应的controller,并且响应init方法

- (instancetype)initWithContext:(id)context;//加载数据或者更新当前Controller添加的interface objects

//显示当前加载的UI时

- (void)willActivate;//更新interface objects或者处理其他事件

//当用户切换页面或者停止使用时

- (void)didDeactivate;//应该在这里清理task或者数据,更新将会被系统忽略

页面跳转(两组)

第一组 (和UIViewController类似)

- (void)pushControllerWithName:(NSString *)name context:(id)context

- (void)popController;

- (void)popToRootController;

- (void)presentControllerWithName:(NSString *)name context:(id)context;

- (void)presentControllerWithNames:(NSArray *)names contexts:(NSArray *)contexts;

- (void)dismissController;

- (void)becomeCurrentPage;

【注】

(a)push和present方法第一个参数对应的时Storyboard中设置的identifier字符串,watch kit extension 用这几个API向watch os传递消息,真实的UI加载渲染是在watch端进行

(b)popToRoot 是跳转到storyboard中main Entry Point 对应的Controller

(c)presentControllerWithNames  我们可以present一组Controller,这一组Controller将以page control的形式展示

(d)becomeCurrentPage当前页面是以page control 的形式展示的时候,调用这个方法可以改变当前的page

第二组

-  (id)contextForSegueWithIdentifier:(NSString *)segueIdentifier;

-  (NSArray *)contextsForSegueWithIdentifier:(NSString *)segueIdentifier;

-  (id)contextForSegueWithIdentifier:(NSString *)segueIdentifier inTable:(WKInterfaceTable *)table rowIndex:(NSInteger)rowIndex;

-  (NSArray *)contextsForSegueWithIdentifier:(NSString *)segueIdentifier inTable:(WKInterfaceTable *)table rowIndex:(NSInteger)rowIndex;

【注】可以直接在storyboard中设置TriggeredSegues,使用Segues时,同样支持push和model两种跳转方式

响应交互事件

WKInterfaceObject中像Button,Slider,Switch等控件可以和用户进行交互

【需要注意的是】

WKInterfaceController包含WkInterfaceTable实例时,可以通过实现默认的

- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex

响应table每一行的点击事件,比UITableView更加简单

Glance (对用户进行短时的提醒)

可以通过storyboard创建一个Glance interface Controller对应到watchKit Extension中,同意继承于WKInterfaceController,享有同样的生命周期,也可以和用户进行交互

当用户Tap Glance 页面时,会跳转到我们的watch App中

//使用自定义的GlanceInterfaceController传递数据

- (void)updateUserActivity:(NSString *)type userInfo:(NSDictionary *)userInfo//比如我们需要点击Glance之后进入到某一个特定的页面,可以把目标页面的id和要传递的其他消息包装到字典中,然后在initial Interface Controller中实现 下面的方法

- (NSString *)actionForUserActivity:(NSDictionary *)userActivity context:(id *)context//跳转到目标页面,这里的userActivity就是上面传递的userInfo,返回的NSString是目标页面的identifier,context是目标页面的context

Notification&WKUserNotificationInterfaceController

//主体App支持Notification时,watch能够显示通知,当用户点击通知进入App时

- (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)remoteNotification

或者

- (void)handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)localNotification//方法将会被响应,可以实现这两个方法获得通知的消息,跳转到目标页面

//可以通过storyboard创建一个Notifier interinterface Controller,可以实现自定义的通知界面

- (void)didReceiveRemoteNotification:(NSDictionary *)remoteNotification withCompletion:(void(^)(WKUserNotificationInterfaceType interface)) completionHandler

或者

- (void)didReceiveLocalNotification:(UILocalNotification *)localNotification withCompletion:(void(^)(WKUserNotificationInterfaceType interface)) completionHandler//获得通知内容,并设置处理完成的回调block

Menu

//在上下文环境中添加相应的item

- (void)addMenuItemWithImage:(UIImage *)image title:(NSString *)title action:(SEL)action;

- (void)addMenuItemWithImageNamed:(NSString *)imageName title:(NSString *)title action:(SEL)action;

- (void)addMenuItemWithItemIcon:(WKMenuItemIcon)itemIcon title:(NSString *)title action:(SEL)action;

- (void)clearAllMenuItems;

WKInterfaceObject

负责界面的元素,只负责在WatchKit Extension 和 Watch App中传递响应的事件,具体的UI渲染在Watch App 中完成

Watch App 和 iOS App的布局方式完全不同,无法指定某个视图的具体坐标,不能用autolayout,只能以行为基本单位进行布局,如果一行中要显示多个元素,通过WKInterfaceGroup布局

WKInterfaceTable

可以通过storyboard直接在Controller中添加一个Table,每一个table默认包含一个Table Row Controller(继承的是NSObject),这个table row 相当于之前的cell,可以使用每一种row的样式,设置identifier来区分

//可以通过以下两组设置table的每一行的样式,rowType对应的时row Controller的identifier

- (void)setRowTypes:(NSArray *)rowTypes;

- (void)setNumberOfRows:(NSInteger)numberOfRows withRowType:(NSString *)rowType;

//可以通过- (id)rowControllerAtIndex:(NSInteger)index获得某一行对应的Row Controller

【例】

- (void)loadTableRows {

[self.interfaceTable setNumberOfRows:self.elementsList.count withRowType:@"default"];

// Create all of the table rows.

[self.elementsList enumerateObjectsUsingBlock:^(NSDictionary *rowData, NSUInteger idx, BOOL *stop) {

AAPLElementRowController *elementRow = [self.interfaceTable rowControllerAtIndex:idx];

[elementRow.elementLabel setText:rowData[@"label"]];

}];

}

//删除table的row

- (void)insertRowsAtIndexes:(NSIndexSet *)rows withRowType:(NSString *)rowType;

- (void)removeRowsAtIndexes:(NSIndexSet *)rows;

WKInterfaceDevice

这是一个单例类,可以获得当前的Watch的部分信息

@property(nonatomic,readonly) CGRect    screenBounds;

@property(nonatomic,readonly) CGFloat   screenScale;

@property(nonatomic,readonly,strong) NSLocale *currentLocale;

@property(nonatomic,readonly,copy)  NSString *preferredContentSizeCategory;

另外我们可以使用这个类中的以下一组方法来缓存图片,以备将来继续使用:

- (void)addCachedImage:(UIImage *)image name:(NSString *)name;

- (void)addCachedImageWithData:(NSData *)imageData name:(NSString *)name;

- (void)removeCachedImageWithName:(NSString *)name;

- (void)removeAllCachedImages;

WKInterfaceImage

已经缓存的图片,可以使用下面的API直接读取:

- (void)setImageData:(NSData *)imageData;

- (void)setImageNamed:(NSString *)imageName;

WatchKit允许每一个App最多缓存20MB的图片,如果超过的话,WatchKit将从最老的数据开始删除,为新数据腾出空间。

时间: 2024-10-29 04:30:49

Apple Watch API的功能的相关文章

关于 Apple Metal API 的一些想法

在看完 Metal 的开发文档后,除了官方所宣称的一些优点外(比如说更容易理解和使用的 API,更直接和精细的硬件控制,减少 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经验看来,以下一些方面更让人兴奋. 更方便和友好的多线程 GPU 渲染支持 GLES 的设计,所有东西都必须跟一个 GL Context 绑定,由 GL Context 内部所控制的状态机驱使,而 GL Context 又跟单个线程本身紧密绑定在一起,导致很难支持构建一个良好的多线程 GPU 渲染架构

[转]使用Google地图API搜索功能

使用Google地图API搜索功能 由于工作关系,最近这两天研究了下Google地图API,要实现地图位置搜索功能,显示搜索结果并能在地图上标记下来,刚开始还考虑使用51ditu,出于搜索关键字分词等方面考虑,最后还是决定使用Google地图,一直也都是那么的崇拜谷歌的大神,这次就来体验一翻~ 在Google地图标记定位到一点 刚开始是实现在Google地图上定位一点的功能,API接口里GMap2类有一个setCenter(center:GLatLng, zoom?:Number, type?:

Nancy之实现API的功能

原文:Nancy之实现API的功能 0x01.前言 现阶段,用来实现API的可能大部分用的是ASP.NET Web API或者是ASP.NET MVC,毕竟是微软官方出产的,用的人也多. 但是呢,NancyFx也是一个很不错的选择.毕竟人家的官方文档都是这样写的:framework for building HTTP based services. 本文主要是通过一个简单的场景和简单的实现来说明. 0x02.场景假设与分析 现在A公司与B公司有一些业务上的合作,B公司要得到一些关于A公司产品的信

java24:Java API正则功能;StringBuilder;Date

Java 正则功能 java.util.regex.Pattern 中 java String 支持 正则 mathch(正则表达式) 将一个字符串与正则表达式进行匹配,如果匹配成功就返回true 否则返回false package day24; import java.util.Scanner; import org.apache.commons.lang.StringUtils; public class Demo01 { public static void main(String[] a

Windows加密API的功能分类

本地数据加密保护本地数据加密保护机制提供了简单的DAPI调用接口,密钥管理等等一概由系统来处理.DAPI的数据加密保护机制在用户登录会话范围或者本地计算范围,使用操作系统设计的方式加密保护数据和解密还原数据,用户无需关心密钥的来源和管理,使用DPAPI 可以使应用程序免于处理生成和存储加密密钥的难题.这一保护的效果与EFS相同,持有加密者安全令牌的进程,都能够访问数据.用户登录后,在用户桌面会话中启动的所有进程,都有可能能够解密,进程之间可以使用保护字区分.对于渗入本地的恶意代码来说,这不会是一

即将到来的Autodesk 主要产品2015版 产品和API新功能在线培训(免费)

一年一度的Autodesk主要产品和API在线培训课程在5月份即将開始.我们呈献给大家5个课程. 1. Revit 2015 产品新功能及API 概览 2. Vault 2015产品新功能及API 概要 3. AutoCAD 2015产品新功能及API 概要 4. Civil3D 2015产品新功能及API 概要 5. Inventor 2015产品新功能及API 概要 报名參加请到这个页面去了解具体信息,请登记报名.课程免费參加,仅仅要有网络就能够參加. Revit API课程在5月16日下午

《HBase权威指南》读书笔记5:第五章 客户端API: 管理功能

类似传统数据库中的DDL 和 DML 模式定义 表 表描述符 HTableDescriptor Writable 和无参数的构造函数 大部分类都有一个无参数的构造函数,这些类都实现了Hadoop 的 Writable接口. 任意不相交系统间的远程通信: 例如客户端与服务端或者服务端之间彼此通信,都使用了Hadoop RPC框架.框架中需要远程方法的参数都实现 Writable接口,进而能够序列化对象并进行传输.writable接口有两个实现方法 void write(DataOutput out

13 Tensorflow API主要功能

要想使用Tensorflow API,首先要知道它能干什么.Tensorflow具有Python.C++.Java.Go等多种语言API,其中Python的API是最简单和好用的. Asserts and boolean checks    Building Graphs    Constants, Sequences, and Random Values    Control Flow    Data IO (Python functions)    Higher Order Function

大约 Apple Metal API 一些想法

看后 Metal 的开发文档后,除了官方所宣称的一些长处外(比方说更easy理解和使用的 API.更直接和精细的硬件控制,降低 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经验看来,下面一些方面更让人兴奋. 更方便和友好的多线程 GPU 渲染支持 GLES 的设计,全部东西都必须跟一个 GL Context 绑定.由 GL Context 内部所控制的状态机驱使,而 GL Context 又跟单个线程本身紧密绑定在一起,导致非常难支持构建一个良好的多线程 GPU 渲染