相比于watch OS 1 ,OS 2將WatchKit Extension挪到了手表端纵苛,手表端將獨立進行邏輯處理,編碼方面沒有太大變化,通信方式發(fā)生了改變铺厨,改為使用<code>WatchConnectivity</code>進行通信。
與手表端進行通信
你需要在iPhone端和手表端同時進行注冊<code>WCSession</code>硬纤。
注冊方式:
let session = WCSession.defaultSession()
if WCSession.isSupported() {
session.delegate = self;
session.activateSession()
}
發(fā)送信息:
WCSession.defaultSession().sendMessage(["key":"value"], replyHandler: { (reply) in
//回調(diào)
}) { (error) in
//error
}
我們觀察一下<code>WCSessionDelegate</code>解滓,其中包括很多通信中將使用到的協(xié)議方法,實現(xiàn)相關(guān)協(xié)議即可接收到信息筝家。
你可能用的最多的會是這個協(xié)議方法:
optional public func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject])
這個方法將在前臺時收到通訊信息洼裤,參數(shù)是一個字典。
協(xié)議中一共有三種方法溪王,分別是:
/** ------------------------- iOS App State For Watch ------------------------ */
/** ------------------------- Interactive Messaging ------------------------- */
/** -------------------------- Background Transfers ------------------------- */
UI以及布局
相比于iPhone端腮鞍,手表端受限于尺寸大小,UI控件數(shù)量上少了很多莹菱,經(jīng)常使用到的UI控件包括:
group
Table
Image
Label
Button
Picker
以上控件都是適合手表尺寸上交互的控件移国,同時在UI布局上與iPhone端有較大區(qū)別,手表端不在使用坐標(biāo)系進行布局道伟,而是簡單使用左迹缀、中、右布局蜜徽,也就是在水平和垂直上都左裹芝、中、右三個位置的選擇娜汁,你只能在這個劃分成九宮格的布局中擺放你的控件嫂易,當(dāng)然你是可以控制你的控件的大小的。
group
你可以把你的控件放在<code>group</code>上面掐禁,在group上你同樣可以用左中右的布局進行布局怜械,相當(dāng)于html中的<div>,這樣的布局方式是什么適合使用storyBoard(當(dāng)然你也只能使用StoryBoard)傅事。
WKInterfaceLabel
WKInterfaceLabel和UILabel有較大的區(qū)別缕允,里面的方法只有三個:
//設(shè)置文字
public func setText(text: String?)
//設(shè)置文字顏色
public func setTextColor(color: UIColor?)
//設(shè)置文本屬性
public func setAttributedText(attributedText: NSAttributedString?)
WKInterfaceImage
WKInterfaceImage中的主要方法:
public func setImage(image: UIImage?)
public func setImageData(imageData: NSData?)
public func setImageNamed(imageName: String?)
這里需要注意一點:在watch中不支持像iPhone端那樣的動畫,你唯一制作動畫的方法可能就是利用WKInterfaceImage一幀一幀繪制你的動畫了蹭越,也就是用一系列圖片串成一個動畫障本,你可以使用<code>WKInterfaceImage</code>來實現(xiàn)這一點:
let image1 = UIImage(named: "image1")
let image2 = UIImage(named: "image2")
let image = UIImage.animatedImageWithImages([image1!,image2!], duration: 1)
self.heartImage.setImage(image)
self.heartImage.startAnimating()
像上面那樣就是用兩張圖片拼接成一個動畫,你還可以控制的屬性包括動畫的時間,動畫的播放次數(shù)驾霜,開始動畫和結(jié)束動畫:
// Play all images repeatedly using duration specified in interface description.
public func startAnimating()
// Play a subset of images for a certain number of times. 0 means repeat until stop.
public func startAnimatingWithImagesInRange(imageRange: NSRange, duration: NSTimeInterval, repeatCount: Int)
public func stopAnimating()
·······················
watch中的UI控件大都使用十分簡單案训,大家看看文檔自己嘗試一下都能整明白。
展示新頁面
每一個controller都有一個Identifier粪糙,你想要展示這個controller就必須要設(shè)置Identifier强霎。
在watch中你可選擇展示一個新頁面或者展示多個新頁面,展示多個新頁面也就是通過左滑右滑進行展示蓉冈,大概長成這樣:
這就是兩個頁面進行切換城舞。
具體的方法:
public func presentControllerWithName(name: String, context: AnyObject?) // modal presentation//展示單個
public func presentController(namesAndContexts: [(name: String, context: AnyObject)])//展示多個
public func pushControllerWithName(name: String, context: AnyObject?) // context passed to child controller via initWithContext:
這里和iPhone端的展示方式是一樣的,同樣包括modal和push兩種展示方式寞酿,他需要第一個參數(shù)就是上面填寫的identifier家夺,第二個參數(shù)則是傳遞給這個頁面的參數(shù)。
在watch中還有第三種展示方式:
extension WKInterfaceController {
public class func reloadRootControllers(namesAndContexts: [(name: String, context: AnyObject)])
}
這個方法相當(dāng)于iPhone端中的<code>window.rootViewController</code>同時這個方法將釋放之前所有的界面.
返回上一界面:
self.popToRootController()
self.popController()
watch目前的交互方式比較單一伐弹,同時apple開發(fā)的接口也較少秦踪,所以watch開發(fā)還是比較容易掌握的。
很多文章歡迎訪問我的個人主頁:StrongX.cn