本文章是一個系列,如果有興趣可以看看以下文章:
AppleWatch開發(fā)入門(1)——界面布局
AppleWatch開發(fā)入門(2)——代碼交互迹栓、控制器生命周期兑燥、界面跳轉(zhuǎn)
AppleWatch開發(fā)入門(3)——Table視圖的應(yīng)用
AppleWatch開發(fā)入門(4)——Picker視圖的應(yīng)用
AppleWatch開發(fā)入門(5)——Menu的使用
AppleWatch開發(fā)入門(6)——watchOS中通知的應(yīng)用
AppleWatch開發(fā)入門(7)——AlertController
AppleWatch開發(fā)入門(8)——動畫
一模狭、簡介
動畫一直是 iOS 系統(tǒng)的一大亮點缩焦,CoreAnimation 和粒子效果的支持,開發(fā)者可以很容易的做出效果炫酷的動畫特效娇未。在 watchOS 中墨缘,由于性能和屏幕尺寸的限制,對于動畫零抬,并沒有強大的框架支持镊讼,但是這并不是說開發(fā)者就沒辦法在 watch 上添加動畫的特效了。
二平夜、移動動畫
在 watch 中的移動動畫不像 iPhone 上那么復(fù)雜蝶棋,目前只支持水平、垂直移動忽妒,并且移動的距離是受限的玩裙。水平移動的距離是一個枚舉:left
、center
段直、right
吃溅,也就是說你只能把控件移動到屏幕的左邊、中間鸯檬、右邊决侈,而不能控制具體移動到哪個位置;垂直方向移動的距離也一樣是枚舉:top
喧务、center
赖歌、bottom
,這兩個枚舉如下:
@available(watchOS 2.0, *)
public enum WKInterfaceObjectHorizontalAlignment : Int {
case left
case center
case right
}
@available(watchOS 2.0, *)
public enum WKInterfaceObjectVerticalAlignment : Int {
case top
case center
case bottom
}
執(zhí)行動畫的方法如下:
// 第一個參數(shù)是動畫時間功茴,第二個參數(shù)是閉包庐冯,里面寫如何移動
@available(watchOS 2.0, *)
open func animate(withDuration duration: TimeInterval, animations: @escaping () -> Void)
代碼實現(xiàn)非常簡單:
@IBAction func startHorizontalAnimate() {
// 水平移動到右邊
animate(withDuration: 2) {
self.image.setHorizontalAlignment(.right)
}
}
@IBAction func startVerticalAnimate() {
// 垂直移動到底部
animate(withDuration: 2) {
self.image.setVerticalAlignment(.bottom)
}
}
這里比較有趣,我只是把圖片往下移動了痊土,結(jié)果 button 自動移上去肄扎。
三墨林、幀動畫
和 iOS 類似赁酝,watchOS 中的幀動畫也是通過 UIImage 對象的合集來展示的。只是設(shè)置和用法略有不同旭等。
首先酌呆,watchOS 中幀動畫的操作被單獨封裝成了一個協(xié)議,當(dāng)然搔耕,WKInterfaceImage 類已經(jīng)遵守了這個協(xié)議的:
public protocol WKImageAnimatable : NSObjectProtocol {
//從默認幀開始播放動畫
public func startAnimating()
//播放一個指定范圍的幀動畫 NSRange是幀的范圍隙袁,durtion是播放一遍的時間痰娱,repeatCount是重復(fù)播放次數(shù),0為無限循環(huán)
public func startAnimatingWithImages(in imageRange: NSRange, duration: TimeInterval, repeatCount: Int)
//停止播放動畫
public func stopAnimating()
}
創(chuàng)建幀動畫的步驟與一些注意:
- 關(guān)聯(lián)一個視圖中的 WKInterfaceImage 對象
- 所有幀動畫的圖片幀必須有統(tǒng)一的格式:比如 image1.png菩收,image2.png 等等
- 給 WKInterfaceImage 對象設(shè)置幀前綴:
image.setImageNamed("image")
注意:這里使用的方法和設(shè)置圖片的方法一樣梨睁,但是參數(shù)有別,圖片的設(shè)置需要完整的圖片名娜饵,動畫幀前綴的設(shè)置只要設(shè)置幀圖片的前綴坡贺,并且素材幀必須放入 watchKit App 這個 Target 中,才可以使用箱舞。
- 開始動畫
// range的location是圖片的起始張遍坟,length是圖片的總數(shù)
let range = NSRange(location: 1, length: 18)
image.startAnimatingWithImages(in: range, duration: 2, repeatCount: 0)