? Watch開發(fā)學(xué)習(xí) (四)

WatchOS App架構(gòu)與更新 (WatchOS 2)

前言

WatchOS2出現(xiàn)后常侣,改變了很多東西:

  • 其中最大的改變也是最充滿想象力的改變是將WatchKit Extension直接從iPhone移植到了AppleWatch上,所以這就給了AppleWatch原生App開發(fā)的基礎(chǔ)。
  • 同時(shí)iOS APP與Watch App溝通也有一個(gè)Aplle推出的WatchConnectivityframework久妆,其中提供了一個(gè)類WCSession作為兩者溝通橋梁怠蹂,既可以傳輸String,Dictionary,Array等醒串,還可以共享文件。
  • 而且WatchOS2提供了NSUrlSession拉取網(wǎng)絡(luò)數(shù)據(jù)鄙皇,這表示W(wǎng)atchAPP可以獨(dú)立訪問網(wǎng)絡(luò)芜赌,加之其可以連接WIFI的硬件,其實(shí)Watch對iPhone的依賴性減弱了很多
  • WatchOS2中不能使用iCloud伴逸,只能發(fā)還數(shù)據(jù)給iPhone缠沈,iOS再使用iCloud

WatchOS 2的架構(gòu)


從上面的圖中,可以很明顯地看出错蝴,蘋果把原來運(yùn)行在 iPhone 手機(jī)上的 WatchKit Extension 移到 Apple Watch 中了洲愤。這將直接帶來如下改變:原來只存放一些資源和 Storyboard 的 Watch App,現(xiàn)在程序的業(yè)務(wù)邏輯部分(也就是代碼執(zhí)行部分)也被放到 Watch App 中顷锰。這樣的話柬赐,程序給用戶的體驗(yàn)會更好,Watch App 的運(yùn)行可以完全獨(dú)立于 iPhone 了官紫。值得注意的是肛宋,Apple Watch 2 中還支持 WiFi州藕,所以 Apple Watch 可以通過 WiFi,直接獲取一些網(wǎng)絡(luò)數(shù)據(jù)等酝陈。并且 Apple Watch 無法處理的一些業(yè)務(wù)床玻,可以通過 Connectivity 框架,請求 iPhone 進(jìn)行處理沉帮,并將結(jié)果返回給 Apple Watch锈死。

WatchOS 2的生命周期

用戶對AppleWatch的操作控制了你的App的啟動(dòng)和生命周期。用戶可以通過Home界面穆壕,Glance界面和表盤的Complication與通知Notification啟動(dòng)你的APP馅精。每一個(gè)這樣的操作都會啟動(dòng)你的WatchApp 和WatchAKit Extension。自此開始WatchAPP和WatchKit Extension開始傳遞信息和工作粱檀,直到用戶停止與你WatchAPP的交互洲敢,這時(shí)候iOS會掛起WatchKit Extension。

下圖是WatchApp Launching的過程
以及一個(gè)InterfaceController的生命周期
在ExtensionDelegate中會有WatchAPP的狀態(tài)監(jiān)聽
WatchAPP的狀態(tài)變化如下圖

Watch Connectivity

你可以通過WatchConnectivityframework來實(shí)現(xiàn)watch與配對iPhone上的文件和數(shù)據(jù)的來回傳輸茄蚯。如果這兩個(gè)apps是在前臺上運(yùn)行压彭,則通信是實(shí)時(shí)的,否則通信會被轉(zhuǎn)移到后臺渗常,直至接收數(shù)據(jù)的一方啟動(dòng)進(jìn)入前臺的時(shí)候才轉(zhuǎn)移回來壮不。

在這個(gè)新框架的主要成員是WCSession,它負(fù)責(zé)處理了兩個(gè)設(shè)備之間的所有通信皱碘。你不需要自己去創(chuàng)建這個(gè)類的實(shí)例對象询一,只需要使用defaultSession單例對象就可以了。

要啟動(dòng)和運(yùn)行WCSession癌椿,你需要指定一個(gè)對象去遵從WCSessionDelegate健蕊,分配給WCSession的委托屬性并調(diào)用activateSession()。如果你打算頻繁的使用WatchConnectivity的話踢俄,我強(qiáng)烈建議你盡可能在apps的早期生命周期完成這個(gè)設(shè)置缩功。

這里貼出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生命周期中激活越早越好)

發(fā)送信息:
- (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

動(dòng)畫(Animation)

WatchKit還可以用之前那樣原始方式通過輪詢處理好的圖片組去運(yùn)行動(dòng)畫,不過WKInterfaceController現(xiàn)在通過animateWithDuration(_:animations:)提供了更接近于iOS的基礎(chǔ)動(dòng)畫都办。只需要持續(xù)時(shí)間和block嫡锌,就可以在設(shè)定的持續(xù)時(shí)間里執(zhí)行block里面的動(dòng)畫。例如:

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

你可以通過更改以下WKInterfaceObject屬性來設(shè)置動(dòng)畫:

  • 透明度
  • 寬高
  • 垂直和水平位置
  • 背景顏色
  • 布局組中的插入

訪問更多硬件(MoreAccessToTheHardWare)

watchOS2提供了很多硬件設(shè)備和傳感器琳钉,包括電子表冠DigitalCrown势木,振動(dòng)引擎TapticEngine,心率傳感器heartratesensor歌懒,加速計(jì)accelerometer以及麥克風(fēng)microphone等啦桌。

新接口對象(NewInterfaceObjects)

蘋果在這個(gè)版本的WatchKit里推出了一個(gè)全新的接口對象:WKInterfacePicker,它是個(gè)通過電子表冠來進(jìn)行交互的滾動(dòng)列表歼培。在WKInterfacePicker中的物品(item)可以是文本震蒋、圖像茸塞、或是圖文混合。當(dāng)用戶選擇了里面的物品查剖,WatchKit調(diào)用WKInterfacePicker中的方法來傳遞選擇了的索引钾虐。

WKInterfacePicker可以通過三種不同風(fēng)格來展示:

  • List:把物品垂直排列顯示的列表。
  • Stacked:將要展示的物品轉(zhuǎn)為一疊卡片通過滾動(dòng)電子表冠來一張張顯示笋庄。
  • ImageSequence:從圖像序列中抽出單個(gè)圖像展示效扫。

說到接口控制器,WKInterfaceController現(xiàn)在提供了讓你直接彈出alerts和actionsheets的方法直砂。

調(diào)用presentAlertControllerWithTitle(_:message:preferredStyle:actions:)在當(dāng)前的接口控制器彈出一個(gè)alert或是actionsheet菌仁。根據(jù)你設(shè)定的preferredStyle參數(shù)來顯示出不同的樣式。其中的actions參數(shù)是包含WKAlertAction實(shí)例的數(shù)組静暂,通過用戶點(diǎn)擊相應(yīng)的button來執(zhí)行它自身提供的block济丘。

自定義Widgets

自定義數(shù)字附件是圍繞家族概念構(gòu)建的,每個(gè)家族提供一個(gè)或多個(gè)模板洽蛀,你可以把你的數(shù)字附件子類化后摹迷,再通過這些模板實(shí)現(xiàn)。

有五種直接實(shí)現(xiàn)的數(shù)字附件:

  • Modular:這家族有small,large兩個(gè)分類郊供,并且他們都能通過模塊watch界面上看到峡碉。
  • Circular:只有small分類,在簡約watch界面上看到驮审。
  • Utilitarian:和Modular一樣有small,large兩款在實(shí)用watch界面上看到.


如果你沒有AppleWatch或是對watch界面類型不熟悉可以看指南了解鲫寄,里面也提到過怎么實(shí)現(xiàn)Custom Complications(自定義數(shù)字附件)。也可以從watchOS 2 Transition Guide的Providing Custom Complications部分查看更多關(guān)于編譯Custom Complications的細(xì)節(jié)疯淫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地来,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子峡竣,更是在濱河造成了極大的恐慌靠抑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件适掰,死亡現(xiàn)場離奇詭異,居然都是意外死亡荠列,警方通過查閱死者的電腦和手機(jī)类浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肌似,“玉大人费就,你說我怎么就攤上這事〈ǘ樱” “怎么了力细?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵睬澡,是天一觀的道長。 經(jīng)常有香客問我眠蚂,道長煞聪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任逝慧,我火速辦了婚禮昔脯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笛臣。我一直安慰自己云稚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布沈堡。 她就那樣靜靜地躺著静陈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诞丽。 梳的紋絲不亂的頭發(fā)上鲸拥,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音率拒,去河邊找鬼崩泡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛猬膨,可吹牛的內(nèi)容都是我干的角撞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼勃痴,長吁一口氣:“原來是場噩夢啊……” “哼谒所!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沛申,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤劣领,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后铁材,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尖淘,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年著觉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了村生。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饼丘,死狀恐怖趁桃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤卫病,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布油啤,位于F島的核電站,受9級特大地震影響蟀苛,放射性物質(zhì)發(fā)生泄漏益咬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一屹逛、第九天 我趴在偏房一處隱蔽的房頂上張望础废。 院中可真熱鬧,春花似錦罕模、人聲如沸评腺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒿讥。三九已至,卻和暖如春抛腕,著一層夾襖步出監(jiān)牢的瞬間芋绸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工担敌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摔敛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓全封,卻偏偏與公主長得像马昙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子刹悴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Watch應(yīng)用的數(shù)據(jù)傳輸-與iPhone以及網(wǎng)絡(luò)(WatchOS 1) iPhone App行楞、WatchKit E...
    BBH_Life閱讀 783評論 0 1
  • 昨天去學(xué)校給兒子開了初中一年級的第一次家長會。期中考試剛過土匀,這個(gè)家長會看來是總結(jié)會嘍子房! 匆匆在家長會開始前趕到學(xué)校...
    云紫煙閱讀 179評論 2 1
  • 上班折騰上電,終于到晚上有了進(jìn)展就轧≈ず迹回想問題根源,外界條件不夠好妒御,沒有樣片供參考躯砰,更無面包板一說。積累第一手經(jīng)驗(yàn)携丁,不...
    NemoX閱讀 152評論 0 0
  • 還給我梦鉴,上個(gè)圣誕我買給你的手表李茫。 還給你,去年暑假你送給我的外套肥橙。 燒掉那年你對我表白時(shí)送的小城堡魄宏。 扔掉去年一起...
    XIZHOU西舟閱讀 309評論 20 6
  • Retrofit與okhttp共同出自于Square公司,retrofit就是對okhttp做了一層封裝存筏。把網(wǎng)絡(luò)請...
    ayvytr閱讀 1,104評論 0 0