[轉載]Apple Watch 開發詳解

Apple Watch 開發詳解

Apple Watch如今對於第三方開發者來講更多的仍是一塊額外的屏幕。暫時WatchKit沒有能給出足夠的接口。如今Watch App的主要運算邏輯須要依賴iPhone,Apple也承諾會有原生的手錶App,可能要等到Apple Watch和WatchKit的徹底版面世的時候。html

一、兩種屏幕分辨率

屏幕尺寸 38mm 42mm
分辨率 272 x 340 312 x 390
寬高比 4:5 4:5

二、三種屏幕模式

主屏模式 Glance模式 通知模式
主界面 單屏即時信息頁面 消息通知界面
可自定義佈局,放置button等控件 全部信息必須在一屏內展現,不能有交互控件,點擊進入Watch應用 有通知的時候喚起,可添加合適的按鈕

三、兩種通知顯示方式

  • 兩種顯示模式
Short Look Long Look
查看屏幕上包含應用圖標、名稱、簡單通知內容等信息 應用圖標和名稱將會移至屏幕頂端,內容佔據主要的顯示空間,佩戴者能夠滑動來完成其它交互
  • 兩種載入模式
static dynamic
直接載入 初始化interfaceController後載入

四、手勢

只支持如下手勢,不支持自定義手勢git

手勢 行爲
縱向滑動 瀏覽內容
橫向滑動 頁面間切換
點按 選擇內容
長按擠壓 打開菜單
數字表冠 旋轉,調整滾動速度
屏幕邊緣向左掃 返回上一個界面
屏幕底部向上滑 打開Glance界面

五、 Watch App 架構

  • 一個完成的Watch應用由 WatchKit App 和 WatchKit Extension兩部分組成,WatchKit App負責展現,安裝在Watch上,WatchKit Extension負責業務和控制邏輯,安裝在iPhone上。全部運算、邏輯以及控制都是在iPhone上完成。經過WatchKit通信
    圖片名稱github

  • Watch App 控制流
    圖片名稱數組

  • ViewController 生命週期
    圖片名稱xcode

6 、基礎類

  • WKInterfaceController 至關於UIViewController 。生命週期方法分別是:緩存

    -initWithContext: 被初始化時調用,通常在這裏配置視圖元素,至關於-viewDidLoad
    -willActivate 將要呈現的時候調用,也能夠在這個方法中進行視圖元素的設置,至關於-viewWillAppear
    -didDeactivate 呈現後調用,在這個方法中停用持有self的對象,如NSTimer。至關於-viewDidDisappear架構

  • WKInterfaceObject 及其子類app

    WKInterfaceObject 至關於UIView的代理,WatchKit實際呈現的View對於開發者來講是不可見的,只能經過WKInterfaceObject對UI對象屬性進行設置,能夠設置的屬性很是少。學習成本並不大。
    WKInterfaceButton 至關於UIButton的代理
    WKInterfaceImage 至關於UIImageView的代理佈局

WatchKit獨立於UIKit,全部的類都繼承自NSObject,沒有完整的Response chain學習

七、UI開發

  • Watch App 的視圖開發不能使用代碼,必須StoryBoard

  • Watch App 採起的佈局方式和 iOS App徹底不一樣。不能使用 autoLayout或者座標。只能使用相對佈局。

    水平:left center right
    垂直:top center bottom

  • View Size可使用三種方式設置:

    Size To Fit Content : View的大小適應內容的大小

    Relative To Container : 相對容器設置自身大小

    Fixed :設置固定的寬高

  • WKInterfaceGroup 佈局容器
    貌似其餘的WKInterfaceObject子類對象都不能重疊,只有這個類能夠同其餘的WKInterfaceObject對象重疊佈局。至關於Android的layout佈局控件。

  • WKInterfaceTable 列表視圖

    相對於UITableView,不須要設置delegate和dataSource。在初始化的時候直接設置行數和樣式。

    經過-setNumberOfRows:withRowType:

    經過-rowControllerAtIndex:枚舉每一個行進行設定。

    經過rowController設置cell樣式,至關於UITableViewCell。rowController繼承自NSObject,這點同其餘WK組件不一樣。顯示邏輯須要在SB中設置,並綁定。細節看代碼

    -(void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex 實現這個方法接受table的點擊回調,不須要也沒法設置delegate。

  • Menu 視圖

    在SB中加入Context Menu,長按屏幕呼出。

    能夠經過SB或者代碼的方式設置Menu Item。上下文環境調用如下方法添加:

    -addMenuItemWithItemIcon:title:action:
    -addMenuItemWithImageNamed:title:action:
    -addMenuItemWithImage:title:action:
    -clearAllMenuItems

    除了用SB設置和以上方法外,沒法獲取WKInterfaceMenu和WKInterfaceMenuItem的實例或者代理。

  • WKInterfaceImage

    至關於UIImageView

    -setImageNamed: 獲取Watch App的圖片,注意這個圖片必須存儲在Watch App,手錶本身的bundle裏。Extension中的圖片用這個方法是沒法顯示的。

    -setImage: -setImageData: 從Extension中獲取圖片,經過藍牙傳送到手錶。

    能夠經過WKInterfaceDevice 的 -addCachedImage:name: 方法將Extension中獲取的圖片緩存到手錶中。每一個 app 的 cache 的尺寸大約是 20M,超過的話 WatchKit 將會從最老的數據開始刪除,以騰出空間存儲新的數據。

八、導航開發

  • 棧導航方式,相似UINavigationController。觸碰左上角可返回

    -pushControllerWIthName:context: 第一個參數是Controller對應的Identifier字符串,在SB中設置。可經過content傳遞數據。

    -popController

    -popToRootController

  • modal方式。行爲基本同UIKit同樣,不一樣的是觸碰左上角可返回

    -presentControllerWithName:context:

    -dismissController

  • 分頁導航。相似UIPageController。左右滑動切換

    -presentControllerWithNames:contexts: 傳入 names 和 contexts數組,經過這種方式被呼出的 Controller 將以 page 導航方式呈現。

全部的導航方式均可以經過代碼或者SB的方式實現。

九、其餘

  • 不能執行須要權限的任務,例如在watch中請求位置權限
  • 不要在watch中進行後臺任務
  • 不要在watch中執行復雜邏輯、耗時任務
  • watch中沒法播放視頻
  • cache尺寸只有20M
  • 傳感器API未開放
  • 動畫API未開放,用一組幀圖片代替

十、 Demo

 

原博客地址:http://www.cnblogs.com/zy1987/articles/4352548.html

相關文章
相關標籤/搜索