Xcode支援用storyboard來建立Watch app的介面。當你在工程中新建一個Watch app,Xcode提供會提供一個storyboard來實現你的UI。這個Storyboard至少有一個Watch app的介面場景,並可能有額外的快速預覽(glance)或通知介面場景。你可以從介面控制器中的物件庫中拖動到storyboard的場景中。
Storyboard中的每個場景以相應的WKInterfaceController子類為支援(對於動態通知介面,子類是WKUserNotificationInterfaceController)。 對於每一個新的場景,可以在標識檢查器(Identity inspector)中輸入你介面控制器的名字。 每個介面控制器的程式碼都在WatchKit的擴充套件目標中執行,不用在你的Watch app中引入任何程式碼。
介面控制器怎樣工作(How Interface Controllers Work)
介面控制器(Interface controller)管理你storyboard的場景內容。每個介面控制器都使用outlet來儲存場景中的引用物件,並定義action方法來響應使用者互動。在執行時,你可以使用介面控制器的initWithContext:和willActivate方法來配置介面。在這些方法裡,你的操作任務如下:
- 獲取你想展示的資料。
- 設定初始化和配置標籤,圖片和其他控制元件。
- 根據你的需要,展示或隱藏你的介面物件。
這裡沒有限制Watch app中能擁有的介面控制器數量,但是過多的介面控制器意味著更復雜,所以要儘可能精簡。您為app選擇的導航型別定義了使用者怎樣從一個介面跳入下一個。有些導航型別需要你清晰的展示下一個介面控制器,而有些不用。更多關於兩個場景間導航的資訊,請查閱Interface Navigation.
整合你的故事版場景(Assembling Your Storyboard Scenes)
Watch app不使用iOS app那種佈局模型。當你整合你的Watch app的介面場景,你無法在充足的空間裡通過任意的佈局元素來建立檢視層級。相反,當你新增元素到場景,Xcode列出許多選項給你,垂直地疊放在不同的行中。在執行時,Apple Watch會根據可用空間將這些元素平鋪出來。
WatchKit也提供了幾種在storyboard場景裡更精確的佈局方法。大多數檢視元件的size和position都可以在屬性監視器(Attributes inspector)裡配置。物件組群提供了另一種重要的工具來佈局元件,及允許你像垂直佈局那樣水平佈局你的元素。組群還提供額外的選項來佈局組群的邊界內元件。組群沒有預設的視覺呈現形式,但可以按你自己的想法配置背景顏色或者背景圖。
圖5-1展示了排列在storyboard檔案中的幾種不同元素。前三個元素都是標籤,它們每個都佔用了自己那一行的全部水平寬度。對於每個標籤,對齊變數決定了檢視控制器邊框是向左對齊、向右對齊還是居中對齊。標籤的下面是一組水平排列的包含了兩張圖的物件。介面還包含了一個開關、, 一條separator(分割線)和一個按鈕,這些元素都垂直地堆疊在物件組的最下面。
圖5-1 Xcode中的介面:
當在Xcode中建立你的介面時,儘可能地讓物件自己調整尺寸來適應可用空間。App介面應該可以執行兩種尺寸的Apple Watch。讓系統調整物件尺寸來適應可用空間,這樣可最小化為每款裝置編寫的程式碼量。
在執行時更新介面(Updating Your Interface at Runtime)
在執行過程中,介面控制器能讓物件在相應的storyboad場景中做如下改變:
- 設定或修改資料變數
- 支援改變物件的外觀
- 改變物件的尺寸
- 改變物件的透明度
- 顯示或隱藏物件
你不能新增新的物件到介面或者改變已經存在物件的次序。儘管你不能移除物件,但你可以通過隱藏物件來暫時從圖層中移除。當控制元件被隱藏時,其他物件將會填充此前被佔用的空間。 如果不想填滿這些空間,可以把物件的alpha值設定為0。 更多關於隱藏場景物件的資訊請查閱Hiding Interface Objects。
介面的國際化(Internationalizing Your Interface)
WatchKit app的storyboard是預設基於國際化的。這個特性會使在storyboard中任意的字串都被自動的新增到__Localizable.strings__檔案中。 您唯一要做的工作就是針對每種目標語言翻譯檔案中的字串,並將其包含到應用程式中。 當在執行時建立storyboard場景時,Xcode會插入與本地化相關的檔案。
當考慮國際化你的app時,您主要考慮的是如果排布你的介面,讓包含文字的標籤和控制元件能有足夠的空間進行擴充套件。您可以垂直佈局介面元素以便有足夠的空間展示其標題,而不是把多個按鈕放在同一行中。
對於文字和圖片的國際化處理,可以使用iOS和OS X應用相同的技術。
- 使用NSLocalizedString巨集來從資原始檔夾載入字串。
- 使用NSNumberFormatter物件來格式化數值型變數。
- 使用NSDateFormatter物件來格式化日期。
更多資訊詳見國際化處理Internationalization and Localization Guide。