上一篇WatchKit Storyboard攻略一主要寫到了WatchKit里對于Main入口界面設(shè)置Storyboard的一些要點和技巧,沒想到被轉(zhuǎn)載讓那么多小伙伴們看到,因此我也會繼續(xù)講解這一部分的后續(xù)內(nèi)容。本篇主要針對第二類視圖界面也就是Glance(瞥覽)進行示例介紹,編寫之際恰逢WatchKit beta2的更新,因此也將順便介紹有關(guān)更新內(nèi)容。
Glance的用途大家應(yīng)該比較熟悉了,它是專門用來快速瀏覽信息的視圖界面,所有信息在一屏內(nèi)顯示,而且界面元素無法交互,用戶點擊任意位置都會可開啟Watch的主應(yīng)用。Glance視圖的激活方式是從邊緣上劃。
我們現(xiàn)在打算構(gòu)造一個顯示用戶當前位置的Glance。視圖上應(yīng)包括當前時間、當前位置描述與位置地圖。因此我們會需要WKInterfaceDate、WKIntefaceLabel和WKInterfaceMap三個組件,考慮將他們垂直瀑布式排列。步驟如下:
1.建立項目工程和設(shè)置啟動方式
我們用Xcode6beta2建立一個TestWatchStoryboard的項目并增加target,添加WatchKit App擴展,這一步時記得勾上Glance場景的選項。
Xcode提示你激活Watch程序的scheme,確認激活,但用這個是無法啟動Glance的。我們可以用Duplicate scheme復(fù)制一份,并將新scheme更名為Glance of TestWatchStoryboard2 WatchKit App。
然后修改啟動界面為Glance,即可通過新scheme啟動我們的Glance。
2.配置Glance視圖
打開WatchKitApp的Interface.storyboard,點擊Glance的ViewController,可以看到右邊出現(xiàn)Glance模板配置界面。
右方只有模板選擇的功能。目前模板都是分為上(Upper)和下(Lower)兩部分。雖然選擇很豐富但個人認為強制切割成2塊而不能整體性的全屏是它的主要局限。前面說了我們有三個元素,因此把Upper上方部分模板改為Group-Body1(模板里的Body其實代表的是一個標簽WKInterfaceLabel)。
接著拖拽1個Date組件到Upper的Group中代表當前時間,再拖拽1個Map控件到Lower的Group代表當前地圖位置,界面和結(jié)構(gòu)如下:
這時我們也可以發(fā)現(xiàn)Xcode6.2beta2與beta1的區(qū)別:點擊各項屬性的+號能分別為42mm和38mm設(shè)備指定不同的屬性值,結(jié)合上一篇里我們提到的特性,界面布局的靈活性得到大大提升!
比如我們運行在38mm表盤上時發(fā)現(xiàn)日期時間在一行內(nèi)顯示不下,可以為38mm表盤設(shè)置縮小一半的Scale,將Min Scale值中38mm設(shè)備的對應(yīng)值設(shè)置為0.5,并同理設(shè)置Label元素:
3.利用代碼更新內(nèi)容
再簡單介紹一下本示例的代碼實現(xiàn)思路。
首先建立所述三個Storyboard控件與控制器代碼中對象的IBOutlet關(guān)聯(lián)。名稱分別為txtDate、txtLocation與map:
@IBOutletweakvar txtDate: WKInterfaceDate! @IBOutletweakvar txtLocation: WKInterfaceLabel! @IBOutletweakvar map: WKInterfaceMap!然后增加各控件初始化時的設(shè)置代碼,這里我們發(fā)現(xiàn)了beta2版的又一個差異,WKInterfaceController的初始化函數(shù)以前是init(context: AnyObject?),現(xiàn)在變更為awakeWithContext(context: AnyObject?) ,這個變動的原因是你其實無法在WatchKit Extension里進行視圖控制器構(gòu)造函數(shù)的調(diào)用,所以init是名不副實的,還是以awakeFromNib類似的名稱命名更好理解。我們?yōu)榱撕喕o態(tài)的設(shè)置地圖位置與地址標簽為武漢大學:
overridefunc awakeWithContext(context: AnyObject?) { super.awakeWithContext(context) txtLocation.setText("@:\WuhanUniversty") map.setRegion(MKCoordinateRegion(center: CLLocationCoordinate2DMake(30.541093, 114.360734), span: MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0))) }
已經(jīng)完成!選擇Glance的Scheme并運行,38mm設(shè)備上效果如下:
Glance部分內(nèi)容不算多,本系列下一篇我們會研究Notification。
后話:作者非常開心的看到Xcode6.2beta2所帶WatchKit的功能得到進一步豐富,這證明Apple確實在不斷完善SDK,相信等到AppleWatch發(fā)售時WatchKit正式版的功能將更加完整。