精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Apple WatchKit 初探

移動(dòng)開發(fā) iOS
隨著今天凌晨 Apple 發(fā)布了第一版的 Watch Kit 的 API,對于開發(fā)者來說,這款新設(shè)備的一些更詳細(xì)的信息也算是逐漸浮出水面。可以說第一版的 WatchKit 開放的功能總體還是令人滿意的。Apple 在承諾逐漸開放的方向上繼續(xù)前進(jìn)。

隨著今天凌晨 Apple 發(fā)布了***版的 Watch Kit 的 API,對于開發(fā)者來說,這款新設(shè)備的一些更詳細(xì)的信息也算是逐漸浮出水面。可以說***版的 WatchKit 開放的功能總體還是令人滿意的。Apple 在承諾逐漸開放的方向上繼續(xù)前進(jìn)。本來在 WWDC 之后預(yù)期 Today Widget 會(huì)是各類新穎 app 的舞臺(tái)以及對 iOS 功能的極大擴(kuò)展,但是隨著像 Launcher 和 PCalc 這些創(chuàng)意型的 Today Widget 接連被下架事件,讓開發(fā)者也不得不下調(diào)對 WatchKit 的預(yù)期。但是至少從現(xiàn)在的資料來看,WatchKit 是允許進(jìn)行復(fù)雜交互以及完成一些獨(dú)立功能的。雖然需要依托于 iPhone app,但是至少能夠發(fā)揮的舞臺(tái)和空間要比我原先想象的大不少。

當(dāng)然,因?yàn)樵O(shè)備本身的無論是電量還是運(yùn)算能力的限制,在進(jìn)行 Watch app 開發(fā)的時(shí)候也還是有很多掣肘。現(xiàn)在 Watch app 僅僅只是作為視圖顯示和回傳用戶交互的存在,但是考慮到這是這款設(shè)備的***版 SDK,另外 Apple 也有承諾之后會(huì)允許真正運(yùn)行在 Watch 上的 app 的出現(xiàn),Apple Watch 和 WatchKit 的未來還是很值得期待的。

廢話不再多,我們來簡單看看 WatchKit 的一些基本信息吧。

我們能做什么

Watch app 架構(gòu)

首先需要明確的是,在 iOS 系統(tǒng)上,app 本體是核心。所有的運(yùn)行實(shí)體都是依托在本體上的:在 iOS 8 之前這是毋庸置疑的,而在 iOS 8 中添加的各種 Extension 也必須隨¥同 app 本體捆綁,作為 app 的功能的補(bǔ)充。Watch app 雖然也類似于此,我們要針對 Apple Watch 進(jìn)行開發(fā),首先還是需要建立一個(gè)傳統(tǒng)的 iOS app,然后在其中添加 Watch App 的 target。在添加之后,會(huì)發(fā)現(xiàn)項(xiàng)目中多出兩個(gè) target:其中一個(gè)是 WatchKit 的擴(kuò)展,另一個(gè)是 Watch App。在項(xiàng)目相應(yīng)的 group 下可以看到,WatchKit Extension 中含有代碼 (InterfaceController.h/m 等),而 Watch App 里只包含了 Interface.storyboard。不過暫時(shí)看來的好消息是 Apple 并沒有像對 iPhone Extension 那樣明確要求針對 Watch 開發(fā)的 app 必須還是以 iOS app 為核心。也就是說,將 iOS app 空殼化而專注提供 Watch 的 UI 和體驗(yàn)也許是被允許的。

 

在應(yīng)用安裝時(shí),負(fù)責(zé)邏輯部分的 WatchKit Extension 將隨 iOS app 的主 target 被一同安裝到 iPhone 中,而負(fù)責(zé)界面部分的 WatchKit App 將會(huì)在主程序安裝后由 iPhone 檢測有沒有配對的 Apple Watch,并提示安裝到 Apple Watch 中。所以在實(shí)際使用時(shí),所有的運(yùn)算、邏輯以及控制實(shí)際上都是在 iPhone 中完成的。在需要界面刷新時(shí),由 iPhone 向 Watch 發(fā)送指令進(jìn)行描畫并在手表盤面上顯示。反過來,用戶觸摸手表交互時(shí)的信息也由手表傳回給 iPhone 并進(jìn)行處理。而這個(gè)過程 WatchKit 會(huì)在幕后為我們完成,并不需要開發(fā)者操心。我們需要知道的就是,原則上來說,我們應(yīng)該將界面相關(guān)的內(nèi)容放在 Watch App 的 target 中,而將所有代碼邏輯等放到 Extension 里。

在手表上點(diǎn)擊 app 圖標(biāo)運(yùn)行 Watch App 時(shí),手表將會(huì)負(fù)責(zé)喚醒手機(jī)上的 WatchKit Extension。而 WatchKit Extension 和 iOS app 之間的數(shù)據(jù)交互需求則由 App Groups 來完成,這和 Today Widget 以及其他一些 Extension 是一樣的。如果你還沒有了解過相關(guān)內(nèi)容,可以參看我之前寫過的一篇 Today Extension 的教程。

主要類

WKInterfaceController 和生命周期

WKInterfaceController 是 WatchKit 中的 UIViewController 一樣的存在,也會(huì)是開發(fā) Watch App 時(shí)花時(shí)間最多的類。每個(gè)WKInterfaceController 或者其子類應(yīng)該對應(yīng)手表上的一個(gè)整屏內(nèi)容。但是需要記住整個(gè) WatchKit 是獨(dú)立于 UIKit 而存在的,WKInterfaceController 是一個(gè)直接繼承自 NSObject 的類,并沒有像 UIKit 中 UIResponser 那樣的對用戶交互的響應(yīng)功能和完備的回調(diào)。

不僅在功能上相對 UIViewController 簡單很多,在生命周期上也進(jìn)行了大幅簡化。每個(gè) WKInterfaceController 對象必然會(huì)被調(diào)用的生命周期方法有三個(gè),分別是該對象被初始化時(shí)的 -initWithContext:,將要呈現(xiàn)時(shí)的 -willActivate 以及呈現(xiàn)結(jié)束后的-didDeactivate。同樣類比 UIViewController 的話,可以將它們理解為分別對應(yīng) -viewDidLoad,viewWillAppear: 以及 -viewDidDisappear:。雖然看方法名和實(shí)際使用上可能你會(huì)認(rèn)為 -initWithContext: 應(yīng)該對應(yīng) UIViewController 的 init 或者initWithCoder: 這樣的方法,但是事實(shí)上在 -initWithContext: 時(shí) WKInterfaceController 中的“視圖元素” (請注意這里我加上了引號,因?yàn)樗鼈儾皇钦嬲囊晥D,稍后會(huì)再說明) 都已經(jīng)初始化完畢可用,這其實(shí)和 -viewDidLoad 中的行為更加相似。

我們一般在 -initWithContext: 和 -willActivate 中配置“視圖元素”的屬性,在 -didDeactivate 中停用像是 NSTimer 之類的會(huì) hold 住 self 的對象。需要特別注意的是,在 -didDeactivate 中對“視圖元素”屬性進(jìn)行設(shè)置是無效的,因?yàn)楫?dāng)前的WKInterfaceController 已經(jīng)非活躍。

WKInterfaceObject 及其子類

WKInterfaceObject 負(fù)責(zé)具體的界面元素設(shè)置,包括像是 WKInterfaceButton,WKInterfaceLabel 或 WKInterfaceImage 這類物件,也就是我們上面所提到的“視圖元素”。可能一開始會(huì)產(chǎn)生錯(cuò)覺,覺得 WKInterfaceObject 應(yīng)該對應(yīng) UIView,但其實(shí)上并非如此。WKInterfaceObject 只是 WatchKit 的實(shí)際的 View 的一個(gè)在 Watch Extension 端的代理,而非 View 本身。Watch App 中實(shí)際展現(xiàn)和渲染在屏幕上的 view 對于代碼來說是非直接可見的,我們只能在 Extension target 中通過對應(yīng)的代理對象對屬性進(jìn)行設(shè)置,然后在每個(gè) run loop 需要刷新 UI 時(shí)由 WatchKit 將新的屬性值從手機(jī)中傳遞給手表中的 Watch App 并進(jìn)行界面刷新。

反過來,手表中的實(shí)際的 view 想要將用戶交互事件傳遞給 iPhone 也需要通過 WKInterfaceObject 代理進(jìn)行。每個(gè)可交互的WKInterfaceObject 子類都對應(yīng)了一個(gè) action,比如 button 對應(yīng)點(diǎn)擊事件,switch 對應(yīng)開或者關(guān)的狀態(tài),slider 對應(yīng)一個(gè)浮點(diǎn)數(shù)值表明選取值等等。關(guān)聯(lián)這些事件也很簡單,直接從 StoryBoard 文件中 Ctrl 拖拽到實(shí)現(xiàn)中就能生成對應(yīng)的事件了。雖然 UI 資源文件和代碼實(shí)現(xiàn)是在不同的 target 中的,但是在 Xcode 中的協(xié)作已然天衣無縫。

Watch App 采取的布局方式和 iOS app 完全不同。你無法自由指定某個(gè)視圖的具體坐標(biāo),當(dāng)然也不能使用像 AutoLayout 或者 Size Classes 這樣的靈活的界面布局方案。WatchKit 提供的布局可能性和靈活性相對較小,你只能在以“行”為基本單位的同時(shí)通過 group 來在行內(nèi)進(jìn)行“列”布局。這帶來了相對簡單的布局實(shí)現(xiàn),當(dāng)然,同時(shí)也是對界面交互的設(shè)計(jì)的一種挑戰(zhàn)。

 

另外值得一提的是,隨著 WatchKit 的出現(xiàn)及其開發(fā)方式的轉(zhuǎn)變,代碼寫 UI 還是使用 StoryBoard 這個(gè)爭論了多年的話題可以暫時(shí)落下帷幕了。針對 Watch 的開發(fā)不能使用代碼的方式。首先,所有的 WKInterfaceObject 對象都必須要設(shè)計(jì)的時(shí)候經(jīng)由 StoryBoard 進(jìn)行添加,運(yùn)行時(shí)我們無法再向界面上添加或者移除元素 (如果有移除需要的,可以使用隱藏);其次WKInterfaceObject 與布局相關(guān)的某些屬性,比如行高行數(shù)等,不能夠在運(yùn)行時(shí)進(jìn)行變更和設(shè)定。基本來說在運(yùn)行時(shí)我們只能夠改變視圖的內(nèi)容,以及通過隱藏某些視圖元素來達(dá)到有限地改變布局 (其他視圖元素會(huì)試圖填充被隱藏的元素)。

總之,代碼進(jìn)行 UI 編寫的傳統(tǒng),在 Apple 的不斷努力下,于 WatchKit 發(fā)布的今天,被正式宣判了死刑。

Table 和 Context Menu

大部分 WKInterfaceObject 子類都很直接簡單,但是有兩個(gè)我想要單獨(dú)說一說,那就是 WKInterfaceTable 和WKInterfaceMenu。UITableView 大家都很熟悉了,在 WatchKit 中的 WKInterfaceTable 雖然也是用來展示一組數(shù)據(jù),但是因?yàn)?WatchKit API 的數(shù)據(jù)傳輸?shù)奶攸c(diǎn),使用上相較 UITableView 有很大不同和簡化。首先不存在 DataSource 和 Delegate,WKInterfaceTable 中需要呈現(xiàn)的數(shù)據(jù)數(shù)量直接由其實(shí)例方法 -setNumberOfRows:withRowType: 進(jìn)行設(shè)定。在進(jìn)行設(shè)定后,使用 -rowControllerAtIndex: 枚舉所有的 rowController 進(jìn)行設(shè)定。這里的 rowController 是在 StoryBoard 中所設(shè)定的相當(dāng)于 UITableViewCell 的東西,只不過和其他 WKInterfaceObject 一樣,它是直接繼承自 NSObject 的。你可以通過自定義 rowController 并連接 StoryBoard 的元素,并在取得 rowController 對其進(jìn)行設(shè)定,即可完成 table 的顯示。代碼大概是這樣的:

  1. //  MyRowController.swift 
  2. import Foundation   
  3. import WatchKit 
  4. class MyRowController: NSObject {   
  5.     @IBOutlet weak var label: WKInterfaceLabel! 
  6. //  InterfaceController.swift 
  7. import WatchKit   
  8. import Foundation 
  9. class InterfaceController: WKInterfaceController { 
  10.     @IBOutlet weak var table: WKInterfaceTable! 
  11.     let data = ["Index 0","Index 1","Index 2"
  12.     override init(context: AnyObject?) { 
  13.         // Initialize variables here. 
  14.         super.init(context: context) 
  15.         // Configure interface objects here. 
  16.         NSLog("%@ init", self) 
  17.         // 注意需要在 StoryBoard 中設(shè)置 myRowControllerType 
  18.         // 類似 cell 的 reuse id 
  19.         table.setNumberOfRows(data.count, withRowType: "myRowControllerType"
  20.         for (i, value) in enumerate(data) { 
  21.             if let rowController = table.rowControllerAtIndex(i) as? MyRowController { 
  22.                 rowController.label.setText(value) 
  23.             } 
  24.         } 
  25.     } 

對于點(diǎn)擊事件,并沒有一個(gè)實(shí)際的 delegate 存在,而是類似于其他 WKInterfaceObject 那樣通過 action 將點(diǎn)擊了哪個(gè) row 作為參數(shù)發(fā)送回 WKInterfaceController 進(jìn)行處理

另一個(gè)比較好玩的是 Context Menu,這是 WatchKit 獨(dú)有的交互,在 iOS 中并不存在。在任意一個(gè) WKInterfaceController 界面中,長按手表屏幕,如果當(dāng)前 WKInterfaceController 中存在上下文菜單的話,就會(huì)嘗試呼出找這個(gè)界面對應(yīng)的 Context Menu。這個(gè)菜單最多可以提供四個(gè)按鈕,用來針對當(dāng)前環(huán)境向用戶征詢操作。因?yàn)槭直砥聊挥邢蓿谛畔@示的同時(shí)再放一些交互按鈕是挺不現(xiàn)實(shí)的一件事情,也會(huì)很丑。而上下文菜單很好地解決了這個(gè)問題,相信長按呼出交互菜單這個(gè)操作會(huì)成為今后 Watch App 的一個(gè)很標(biāo)準(zhǔn)的交互操作。

添加 Context Menu 非常簡單,在 StoryBoard 里向 WKInterfaceController 中添加一個(gè) Menu,并在這個(gè) Menu 里添加對應(yīng)的 MenuItem 就行了。在 WKInterfaceController 我們也有對應(yīng)的 API 來在運(yùn)行時(shí)根據(jù)上下文環(huán)境進(jìn)行 MenuItem 的添加 (這是少數(shù)幾個(gè)允許我們在運(yùn)行時(shí)添加元素的方法之一)。

  1. -addMenuItemWithItemIcon:title:action: 
  2. -addMenuItemWithImageNamed:title:action: 
  3. -addMenuItemWithImage:title:action: 
  4. -clearAllMenuItems 

但是 Menu 和 MenuItem 對應(yīng)的類 WKInterfaceMenu 和 WKInterfaceMenuItem 我們是沒有辦法拿到的。沒錯(cuò),它們甚至都沒有存在于文檔里 :(

基礎(chǔ)導(dǎo)航

WKInterfaceController 的內(nèi)建的導(dǎo)航關(guān)系基本上分為三類。首先是像 UINavigationController 控制的類似棧的導(dǎo)航方式。相關(guān)的 API 有 -pushControllerWithName:context:,-popController 以及 -popToRootController。后兩個(gè)我想不必太多解釋,對于***個(gè)方法,我們需要使用目標(biāo) controller 的 Identifier 字符串 (沒有你只能在 StoryBoard 里進(jìn)行設(shè)置) 進(jìn)行創(chuàng)建。context參數(shù)也會(huì)被傳遞到目標(biāo) controller 的 -initWithContext: 中,所以你可以以此來在 controller 中進(jìn)行數(shù)據(jù)傳遞。

另一種是我們大家熟悉的 modal 形式,對應(yīng) API 是 -presentControllerWithName:context: 和 -dismissController。對于這種導(dǎo)航,和 UIKit 中的不同之處就是在目標(biāo) controller 中會(huì)默認(rèn)在左上角加上一個(gè) Cancel 按鈕,點(diǎn)擊的話會(huì)直接關(guān)閉被 present 的 controller。我只想說 Apple 終于想通了,每個(gè) modal 出來的 controller 都是需要關(guān)閉的這個(gè)事實(shí)...

***一種導(dǎo)航方式是類似 UIPageController 的分頁式導(dǎo)航。在 iOS app 中,在應(yīng)用***次開始時(shí)的教學(xué)模塊中這種導(dǎo)航方式非常常見,而在 WatchKit 里可以說得到了發(fā)揚(yáng)光大。事實(shí)上我個(gè)人也認(rèn)為這會(huì)是 WatchKit 里***使用習(xí)慣的導(dǎo)航方式。在 WatchKit 上的 page 導(dǎo)航可能會(huì)和 iOS app 的 Tab 導(dǎo)航所提供的功能相對應(yīng)。

在實(shí)現(xiàn)上,page 導(dǎo)航需要在 StoryBoard 中用 segue 的方式將不同 page 進(jìn)行連接,新添加的 next page segue 就是干這個(gè)的:

 

另外 modal 導(dǎo)航的另一個(gè) API -presentControllerWithNames:contexts: 接受復(fù)數(shù)個(gè)的 names 和 context,通過這種方式 modal 呼出的復(fù)數(shù)個(gè) Controller 也將以 page 導(dǎo)航方式呈現(xiàn)。

當(dāng)然,作為 StoryBoard 的經(jīng)典使用方式,modal 和 push 的導(dǎo)航方式也是可以在 StoryBoard 中通過 segue 來實(shí)現(xiàn)的。同時(shí) WatchKit 也為 segue 的方式提供了必要的 API。

一些界面實(shí)踐

因?yàn)檎麄€(gè)架構(gòu)和 UIKit 完全不同,所以很多之前的實(shí)踐是無法直接搬到 WatchKit App 中的。

圖像處理

在 UIKit 中我們顯示圖片一般使用 UIImageView,然后為其 image 屬性設(shè)置一個(gè)創(chuàng)建好的 UIImage 對象。而對于 WatchKit 來說,***實(shí)踐是將圖片存放在 Watch App 的 target 中 (也就是 StoryBoard 的那個(gè) target),在對 WKInterfaceImage 進(jìn)行圖像設(shè)置時(shí),盡量使用它的 -setImageNamed: 方法。這個(gè)方法將只會(huì)把圖像名字通過手機(jī)傳遞到手表,然后由手表在自己的 bundle 中尋找圖片并加載,是最快的途徑。注意我們的代碼是運(yùn)行在于手表的 Watch App 不同的設(shè)備上的,雖然我們也可以先通過UIImage 的相關(guān)方法生成 UIImage 對象,然后再用 -setImage: 或者 -setImageData: 來設(shè)置手表上的圖片,但是這樣的話我們就需要將圖片放到 Extension 的 target 中,并且需要將圖片的數(shù)據(jù)通過藍(lán)牙傳到手表,一般來說這會(huì)造成不可忽視的延遲,會(huì)很影響體驗(yàn)。

如果對于某些情況下,我們只能在 Extension 的 target 中獲得圖片 (比如從網(wǎng)絡(luò)下載或者代碼動(dòng)態(tài)生成等),并且需要重復(fù)使用的話,***用 WKInterfaceDevice 的 -addCachedImage:name: 方法將其緩存到手表中。這樣,當(dāng)我們之后再使用這張圖片的時(shí)候就可以直接通過 -setImageNamed: 來快速地從手表上生成并使用了。每個(gè) app 的 cache 的尺寸大約是 20M,超過的話 WatchKit 將會(huì)從最老的數(shù)據(jù)開始刪除,以騰出空間存儲(chǔ)新的數(shù)據(jù)。

動(dòng)畫

因?yàn)闊o法拿到實(shí)際的視圖元素,只有 WKInterfaceObject 這樣的代理對象,以及布局系統(tǒng)的限制,所以復(fù)雜的動(dòng)畫,尤其是UIView 系列或者是 CALayer 系列的動(dòng)畫是無法實(shí)現(xiàn)的。現(xiàn)在看來唯一可行的是幀動(dòng)畫,通過為 WKInterfaceImage 設(shè)置包含多個(gè) image 的圖像,或者是通過計(jì)時(shí)器定時(shí)替換圖像的話,可以實(shí)現(xiàn)幀動(dòng)畫。雖然 Apple 自己的例子也通過這種方法實(shí)現(xiàn)了動(dòng)畫,但是對于設(shè)備的存儲(chǔ)空間和能耗都可能會(huì)是挑戰(zhàn),還需要實(shí)際拿到設(shè)備以后進(jìn)行實(shí)驗(yàn)和觀察。

其他 Cocoa Touch 框架的使用

Apple 建議***不要使用那些需要 prompt 用戶許可的特性,比如 CoreLocation 定位等。因?yàn)閷?shí)際的代碼是在手機(jī)上運(yùn)行的,這類許可也會(huì)在手機(jī)上彈出,但是用戶并不一定正好在看手機(jī),所以很可能造成體驗(yàn)下降。另外大部分后臺(tái)運(yùn)行權(quán)限也是不建議的。

對于要獲取這些數(shù)據(jù)和權(quán)限,Apple 建議還是在 iOS app 中完成,并通過 App Groups 進(jìn)行數(shù)據(jù)共享,從而在 Watch Extension 中拿到這些數(shù)據(jù)。

代碼分享

因?yàn)楝F(xiàn)在一個(gè)項(xiàng)目會(huì)有很多不同的 target,所以使用 framework 的方式封裝不同 target 的公用部分的代碼,而只在各 target 中實(shí)現(xiàn)界面相關(guān)的代碼應(yīng)該是必行的了。這么做的優(yōu)點(diǎn)不僅是可以減少代碼重復(fù),也會(huì)使代碼測試和品質(zhì)得到提升。如果還沒有進(jìn)行邏輯部分的框架化和測試分離的話,在實(shí)現(xiàn)像各類 Extension 或者 Watch App 時(shí)可能會(huì)遇到非常多的麻煩。

因?yàn)槿绻?app 有計(jì)劃進(jìn)行擴(kuò)展推出各種 Extension 的話,將邏輯代碼抽離并封裝為 framework 應(yīng)該是優(yōu)先級***的工作。另外新開的項(xiàng)目如果沒有特殊原因,也強(qiáng)烈建議使用 framework 來組織通用代碼。

Glance 和 Notification

除了 Watch App 本體以外,Glance 和手表的 Notification 也是重要的使用情景。Notification 雖然概念上比較簡單,但是相對于 iOS 的通知來說是天差地別。WatchKit 的通知允許開發(fā)者自行構(gòu)建界面,我們可以通過 payload 設(shè)置比較復(fù)雜和帶有更多信息的通知,包括圖像,大段文字甚至可以交互的按鈕,而不是像 iOS 上那樣被限制在文字和一個(gè)對話框內(nèi)。首先無論是通過 Local 還是 Remote 進(jìn)行的通知發(fā)送會(huì)先到達(dá) iPhone,然后再由 iPhone 根據(jù)內(nèi)容判斷是否轉(zhuǎn)發(fā)到手表。WatchKit App 接收到通知后先會(huì)顯示一個(gè)簡短的通知,告訴用戶這個(gè) app 有一個(gè)通知。如果用戶對通知的內(nèi)容感興趣的話,可以點(diǎn)擊或者抬手觀看,這樣由開發(fā)者自定義的長版本的通知就會(huì)顯現(xiàn)。

Glance 是 WatchKit 的新概念,它允許 Watch App 展示一個(gè)布局固定的 WKInterfaceController 頁面。它和 Watch App 本體相對地位相當(dāng)于 iOS 上的 Today Widget 和 iOS app 本身的地位,是作為手表上的 app 的最重要的信息展示出現(xiàn)的。Glance 正如其名,是短時(shí)存在的提醒,不能存在可交互的元素。不過如果用戶點(diǎn)擊 Glance 頁面的話,是可以啟動(dòng)到 Watch App 的。現(xiàn)在關(guān)于 Glance 本身如何啟動(dòng)和呈現(xiàn)還不是很明確,猜測是某種類似 Today Widget 的呈現(xiàn)方式?(比如按下兩次表側(cè)面的旋鈕)

疑問和改進(jìn)方向

WatchKit 總體令人滿意,提供的 API 和開發(fā)環(huán)境已經(jīng)足夠開發(fā)者作出一些有趣的東西。但是有幾個(gè)現(xiàn)在看來很明顯的限制和希望能加強(qiáng)的方向。

首先是從現(xiàn)在來看 WatchKit 并沒有提供任何獲取設(shè)備傳感信息的 API。不論是心跳、計(jì)步或者是用戶是否正在佩戴 Watch 的信息我們都是拿不到的,這限制了很多數(shù)據(jù)收集和監(jiān)視的健康類 app 的制作。如果希望請求數(shù)據(jù),還是不得不轉(zhuǎn)向使用 HealthKit。但是隨著 iPhone 6 和 6s 的大屏化,在運(yùn)動(dòng)時(shí)攜帶 iPhone 的人可以說是變少了。如果 Watch 不能在沒有 iPhone 配對的情況下收集記錄,并在之后和 iPhone 連接后將數(shù)據(jù)回傳的話,那 Apple 的健康牌就失敗了一大半。相信 Apple 不會(huì)放過這種把用戶捆綁的機(jī)會(huì)...不過如果第三方應(yīng)用能實(shí)時(shí)獲取用戶的佩戴狀況的話,相信會(huì)有很多有意思的應(yīng)用出現(xiàn)。

另外作為在發(fā)布會(huì)上鼓吹的交互革命的旋鈕和觸感屏幕,現(xiàn)在看來并沒有開放任何 API 供開發(fā)者使用,所以我們無法得知用戶旋轉(zhuǎn)了手表旋鈕這個(gè)重要的交互事件。現(xiàn)在看來我們能獲取的操作僅只是用戶點(diǎn)擊屏幕上的按鈕或者拖動(dòng)滑條這個(gè)層級,從這個(gè)角度來說,現(xiàn)在的 WatchKit 還遠(yuǎn)沒達(dá)到可以顛覆移動(dòng)應(yīng)用的地步。

希望之后 Apple 會(huì)給我們帶來其他的好消息吧。

總之,舞臺(tái)已經(jīng)搭好,之后唱什么戲,就要看我們的了。

責(zé)任編輯:chenqingxiang 來源: cocoachina
相關(guān)推薦

2015-01-21 16:35:49

Apple WatchWatchKit

2015-05-25 10:01:17

WatchKitAPP

2014-11-20 16:02:22

WatchKit

2015-10-21 13:57:09

WatchKit 要點(diǎn)開發(fā)

2015-07-20 09:16:42

iOSWatchKit開發(fā)

2015-08-13 10:15:02

WatchKitHealthKitApplePay

2015-04-14 09:33:17

WatchKitAPP

2015-06-30 10:48:41

iOSAPPwarchkit

2015-03-10 09:35:53

AppleWatch開發(fā)Swift

2016-10-11 13:48:41

WebGLJavascriptWeb

2010-06-03 12:57:06

Hadoop

2009-06-24 13:22:27

Glassfish

2015-03-24 19:48:24

2011-05-17 14:11:06

Dijkstra

2011-04-18 09:53:08

Ruby

2012-02-29 15:03:30

2014-12-23 09:39:41

Apple Watch

2012-07-09 10:22:28

Mono for An

2011-08-24 09:30:29

JavaJVM

2012-04-05 13:50:38

Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产人伦精品一区二区| 精品不卡视频| 91精品国产欧美一区二区成人| 亚洲一区三区在线观看| 久久久久久无码午夜精品直播| 嫩草国产精品入口| 欧美日韩三级视频| 黄色三级中文字幕| 岛国最新视频免费在线观看| 国产一区二区看久久| 97香蕉久久夜色精品国产| 一二三不卡视频| 日韩av懂色| 精品电影在线观看| 亚洲美女自拍偷拍| 日韩一二三四| 国产成人午夜精品5599 | 国产超级va在线视频| 99久久777色| 亚洲一区二区三区四区视频| 无码人妻精品一区二区| 国产精品激情| 日韩视频亚洲视频| 波多野结衣一本| 国产精品tv| 555www色欧美视频| 麻豆一区二区三区视频| 麻豆蜜桃在线观看| 亚洲在线观看免费视频| 伊人狠狠色丁香综合尤物| 日av在线播放| www.av亚洲| 2019国产精品视频| 97在线视频人妻无码| 日韩国产一区二| 97香蕉超级碰碰久久免费软件 | 一广人看www在线观看免费视频| 成人18视频在线播放| 91亚洲精品久久久| 一区二区美女视频| 蜜桃一区二区三区四区| 日韩av不卡在线| 国产尤物在线视频| 99热在线精品观看| 97福利一区二区| 国产午夜福利片| 国内精品亚洲| 欧美国产第二页| 国模无码国产精品视频| 这里只有精品在线| 久久影院免费观看| 日韩在线观看视频一区二区| 天天久久综合| 久久精品久久久久| 亚洲欧美另类日本| 欧美电影三区| 久久久久北条麻妃免费看| 老司机精品免费视频| 久久性感美女视频| 精品国模在线视频| 天天天天天天天天操| 在线看片不卡| 欧美精品18videos性欧| 日本三级午夜理伦三级三| 亚洲国产裸拍裸体视频在线观看乱了中文 | 搞黄视频免费在线观看| 国产欧美日韩在线视频| 亚洲日本精品国产第一区| 国产三级在线| 国产精品久久久久久久久搜平片 | 91成人免费在线观看| 精品人妻久久久久一区二区三区| 国产精品综合av一区二区国产馆| 99爱精品视频| 天堂在线视频免费观看| 成人黄色大片在线观看| 久99久在线| 国产天堂在线| 亚洲欧美日韩一区二区三区在线观看| 毛片av在线播放| 欧美激情网站| 欧美偷拍一区二区| 丰满人妻一区二区三区大胸| 国产精品久久久久av蜜臀| 亚洲欧美日韩国产精品| 成年人视频软件| 最新国产拍偷乱拍精品| 国产国语刺激对白av不卡| 国产又粗又长又大视频| 高清不卡在线观看| 日本视频一区二区不卡| 国产视频在线播放| 婷婷久久综合九色综合伊人色| av网址在线观看免费| 亚洲一区二区三区久久久| 精品播放一区二区| 男人的天堂av网| 国产精品99一区二区| 日韩av电影免费观看高清| 国产又大又粗又长| 91蜜桃在线免费视频| 亚洲自拍三区| 中文在线免费二区三区| 欧美日韩国产系列| 中文字幕日韩三级片| 五月精品视频| 日本精品一区二区三区在线播放视频| 国产裸体永久免费无遮挡| 91丝袜美腿高跟国产极品老师| 在线国产99| 台湾佬中文娱乐久久久| 日韩欧美久久一区| 免费成人深夜蜜桃视频| 久久精品男女| 国产精成人品localhost| 国产98在线| 欧美日韩午夜激情| 永久看看免费大片| 国产精品99久久精品| 欧洲精品在线视频| 丰满人妻av一区二区三区| 国产精品久久久久久久久免费相片| 国产白丝袜美女久久久久| 国产日韩中文在线中文字幕| 亚洲午夜性刺激影院| 影音先锋亚洲天堂| 懂色中文一区二区在线播放| 亚洲第一页在线视频| 秋霞国产精品| 日韩精品免费一线在线观看| 日产精品久久久久久久| 国产老女人精品毛片久久| 色综合电影网| 日韩免费小视频| 日韩精品在线免费| 日韩成人高清视频| 成人天堂资源www在线| 日本女人高潮视频| 国产精品成人3p一区二区三区| 国产亚洲美女久久| 日本丰满少妇做爰爽爽| 久久久一区二区三区捆绑**| 欧美 国产 日本| 无码少妇一区二区三区| 欧美一级片久久久久久久| 天天干天天做天天操| 精品久久久久人成| 久久久久成人精品无码中文字幕| 亚洲高清成人| 黑人中文字幕一区二区三区| 丁香花视频在线观看| 精品美女被调教视频大全网站| 全网免费在线播放视频入口| 国产精品99久久久久久有的能看| 天天做天天爱天天高潮| 久久久久久久久久久久电影| 欧美日产国产成人免费图片| 亚洲精品国产一区二| 亚洲香肠在线观看| 国产激情视频网站| 久久午夜av| 神马欧美一区二区| 日日夜夜一区| 久久99热精品| 天堂a中文在线| 色欧美片视频在线观看| 人与嘼交av免费| 久久超碰97人人做人人爱| 在线观看免费黄色片| 91综合久久爱com| 国产69久久精品成人看| 国产在线观看精品一区| 7777精品伊人久久久大香线蕉经典版下载| 中文字幕电影av| 国产aⅴ综合色| 日本欧美黄色片| 精品美女久久久| 国产在线98福利播放视频| 污污片在线免费视频| 337p日本欧洲亚洲大胆色噜噜| 国产高潮久久久| 亚洲欧洲一区二区三区| 美女露出粉嫩尿囗让男人桶| 国产欧美亚洲一区| 亚洲一一在线| 欧美国产极品| 国产精品一区二区三区毛片淫片 | 熟妇高潮一区二区三区| 在线影院国内精品| 欧美黑人一级片| 久久久精品国产免费观看同学| 男人的天堂最新网址| 99国产精品久久久久久久| 先锋影音欧美| 久久男人av| 成人网址在线观看| 色是在线视频| 久青草国产97香蕉在线视频| 五月婷婷丁香网| 欧美区在线观看| 日韩三级一区二区三区| 国产精品进线69影院| av网页在线观看| 精品一区二区三区香蕉蜜桃| 国产中文字幕二区| 亚洲国产精品久久久天堂| 精品在线视频一区二区| 久久国际精品| 国产精品夫妻激情| 麻豆蜜桃在线观看| 欧美国产日韩视频| 97视频在线观看网站| 亚洲精品国精品久久99热一| 国产极品999| 欧美调教femdomvk| 国产免费av一区| 亚洲一级二级在线| 日本少妇高清视频| 欧美高清在线精品一区| jizz日本免费| 成人精品视频一区二区三区| 欧美一级视频在线| 日韩一区精品视频| www.浪潮av.com| 在线欧美不卡| 国产a级黄色大片| 午夜精品视频一区二区三区在线看| 欧美日韩电影一区二区三区| 国产精品色在线网站| 91久久精品国产91久久性色tv| 欧美成人黄色| 国产精品麻豆va在线播放| 中老年在线免费视频| 97超视频免费观看| 高清毛片在线观看| 午夜精品99久久免费| 波多野结衣乳巨码无在线观看| 欧美大胆a视频| av免费在线观看网址| 久久精品国产一区二区电影| 日本免费在线视频| 日韩在线免费观看视频| 日本中文字幕在线看| 在线观看成人黄色| aaa日本高清在线播放免费观看| 亚洲色图av在线| 福利在线午夜| 中文字幕日韩欧美在线| 8888四色奇米在线观看| 自拍偷拍亚洲精品| 色欧美激情视频在线| 日韩一区视频在线| 黄色在线论坛| 欧美多人爱爱视频网站| 毛片在线网址| 国产91精品久久久久久| 在线天堂资源www在线污| 欧美一级电影在线| 色猫猫成人app| 成人激情春色网| 97视频一区| 久久综合福利| jizzjizz欧美69巨大| 综合一区中文字幕| 欧美精品国产一区二区| 日韩精品 欧美| 老司机亚洲精品| 99re精彩视频| 国产成a人亚洲精品| 成人性生活免费看| 久久久99精品免费观看不卡| 亚洲女同二女同志奶水| 亚洲精品中文在线| 久久久精品免费看| 欧美日韩成人综合在线一区二区| 国产日韩一级片| 亚洲国产精品久久久久秋霞蜜臀| 毛片在线播放网站| 日韩视频中文字幕| 99爱在线观看| 国产精品观看在线亚洲人成网| 精品国产三级| 久久久久久久久久久久久久久久av| 欧美午夜精品一区二区三区电影| 三上悠亚免费在线观看| 国语自产精品视频在线看8查询8| 免费无码国产v片在线观看| 麻豆成人免费电影| 国产在线不卡av| 国产精品三级电影| 国产在线免费视频| 欧美日韩一区三区四区| 黄色av小说在线观看| 中文字幕日韩av综合精品| 第一av在线| 国产欧美日韩中文| 欧美黑人做爰爽爽爽| 在线观看福利一区| 欧美一级专区| 伊人久久久久久久久| 欧美国产视频在线| 1级黄色大片儿| 91精品国模一区二区三区| 青青草超碰在线| 欧美另类暴力丝袜| 成人高清一区| 免费在线一区二区| 一区在线视频观看| 不用播放器的免费av| 久久综合av免费| 久久精品国产亚洲av高清色欲| 欧美视频完全免费看| 天天综合网在线观看| 不卡av电影院| 电影在线观看一区二区| 久久狠狠久久综合桃花| 午夜天堂精品久久久久| 免费看涩涩视频| 久久久久久久久久久黄色| 中文字幕第28页| 欧美一二三在线| 日本不卡视频| 国产玖玖精品视频| 国产精品免费大片| 日韩在线视频在线观看| 不卡免费追剧大全电视剧网站| 国产av无码专区亚洲av毛网站| 在线观看成人免费视频| 国产中文字幕在线观看| 欧美在线精品免播放器视频| 国产毛片精品| 免费看黄在线看| 成人高清视频在线| 不卡的免费av| 精品国产一区二区亚洲人成毛片 | 午夜视频在线观看一区二区| www.精品久久| 久久国产精品免费视频 | 欧美浪妇xxxx高跟鞋交| seseavlu视频在线| 国产精品久久久久久久久久久新郎 | 快she精品国产999| 欧美 日本 国产| 亚州成人在线电影| 免费看av毛片| 国语自产精品视频在线看抢先版图片| 狂野欧美xxxx韩国少妇| 狠狠干视频网站| 成人深夜福利app| 日韩xxx高潮hd| 精品五月天久久| 韩国成人动漫| 清纯唯美一区二区三区| 秋霞成人午夜伦在线观看| 亚洲精品一区二区三区影院忠贞| 91国在线观看| av网站在线免费播放| 成人国产在线激情| 欧美一区二区| 在线视频 日韩| 欧美午夜精品久久久久久人妖| 久青青在线观看视频国产| 国产精品久久久久高潮| 午夜激情久久| 亚洲欧美高清在线| 欧美性xxxxx极品| 成在在线免费视频| 成人免费大片黄在线播放| 欧美fxxxxxx另类| 国产高清成人久久| 色偷偷一区二区三区| 黄网站免费在线播放| 国产亚洲情侣一区二区无| 老司机午夜免费精品视频| 91精品国产闺蜜国产在线闺蜜| 欧美成人猛片aaaaaaa| 一区二区三区短视频| 亚洲精品第一区二区三区| 国产一区二区三区免费| 日韩欧美一区二区一幕| 中文字幕精品久久久久| 视频一区日韩| 亚洲乱码国产一区三区| 亚洲欧美日韩成人高清在线一区| 少妇荡乳情欲办公室456视频| 秋霞av国产精品一区| 91成人超碰| 麻豆国产精品一区| 91精品午夜视频| 中文不卡1区2区3区| 国产日产欧美一区二区| 久久综合九色综合97婷婷| 一本色道久久综合熟妇| 欧美激情18p| 成人无号精品一区二区三区| 麻豆av免费看| 欧美色倩网站大全免费| 丁香花在线电影| 偷拍盗摄高潮叫床对白清晰| 91丨九色丨尤物|