Apple Watch 開發詳解


Apple Watch 開發詳解

Apple Watch現在對於第三方開發者來說更多的還是一塊額外的屏幕。暫時WatchKit沒有能給出足夠的接口。現在Watch App的主要運算邏輯需要依賴iPhone,Apple也承諾會有原生的手表App,可能要等到Apple Watch和WatchKit的完全版面世的時候。

1、兩種屏幕分辨率

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

2、三種屏幕模式

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

3、兩種通知顯示方式

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

4、手勢

只支持以下手勢,不支持自定義手勢

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

5、 Watch App 架構

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

  • Watch App 控制流
    圖片名稱

  • ViewController 生命周期
    圖片名稱

6 、基礎類

  • WKInterfaceController 相當於UIViewController 。生命周期方法分別是:

-initWithContext: 被初始化時調用,一般在這里配置視圖元素,相當於-viewDidLoad
-willActivate 將要呈現的時候調用,也可以在這個方法中進行視圖元素的設置,相當於-viewWillAppear
-didDeactivate 呈現后調用,在這個方法中停用持有self的對象,如NSTimer。相當於-viewDidDisappear

  • WKInterfaceObject 及其子類

WKInterfaceObject 相當於UIView的代理,WatchKit實際呈現的View對於開發者來說是不可見的,只能通過WKInterfaceObject對UI對象屬性進行設置,可以設置的屬性非常少。學習成本並不大。
WKInterfaceButton 相當於UIButton的代理
WKInterfaceImage 相當於UIImageView的代理

WatchKit獨立於UIKit,所有的類都繼承自NSObject,沒有完整的Response chain

7、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 將會從最老的數據開始刪除,以騰出空間存儲新的數據。

8、導航開發

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

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

-popController

-popToRootController

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

-presentControllerWithName:context:

-dismissController

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

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

所有的導航方式都可以通過代碼或者SB的方式實現。

9、其他

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

10、 Demo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM