我尝试在newBeat()函数中self.heartSymbol.setImage(currentBeatPattern.heartImage)
但没有加载heartImages。我应该在那里做什么?
如果我使用类似 self.heartSymbol.setImage(UIImage(named:"greenHeartNormal"))
的东西,单个图像加载得很好,但正如您从我的数组和我的 newBeat() 函数中看到的那样,我正在尝试通过数组加载图像并输出到 IBOutlet。
这个想法是,每个图像都应该出现在屏幕上,每个图像脉冲几秒钟,bpmLabel也会随之改变值。动画在 WatchKit 中不起作用,所以我现在已经注释掉了 beat() 函数。但我仍然想用数组和那个 bpmLabel 中的静态图像来做到这一点。使用注释掉的 beat() 函数如何编辑它,以便在没有脉冲图标标签转换动画的情况下获得延时 bmpLabel 文本输出?
import WatchKit
import Foundation
struct BeatPattern {
var heartImage = WKInterfaceImage()
var description = "Normal"
var bpm = 80
var duration: Double {
return 60.0 / Double(bpm)
}
}
let redHeartFast = WKInterfaceImage()
let yellowHeartElevated = WKInterfaceImage()
var greenHeartNormal = WKInterfaceImage()
let purpleHeartSlow = WKInterfaceImage()
let blueHeartSedated = WKInterfaceImage()
class InterfaceController: WKInterfaceController {
@IBOutlet weak var heartSymbol2: WKInterfaceImage!
@IBOutlet weak var heartSymbol: WKInterfaceImage!
@IBOutlet weak var bpmLabel: WKInterfaceLabel!
var currentBeatPattern = BeatPattern()
var currentBeatPatternIndex = 0
var beatPatternsArray = [
BeatPattern(heartImage: redHeartFast, description: "Fast", bpm: 180),
BeatPattern(heartImage: yellowHeartElevated, description: "Elevated", bpm: 140),
BeatPattern(heartImage: greenHeartNormal, description: "Normal", bpm: 80),
BeatPattern(heartImage: purpleHeartSlow, description: "Slow", bpm: 55),
BeatPattern(heartImage: blueHeartSedated, description: "Sedated", bpm: 30)]
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
//self.heartSymbol.setImage(UIImage(named:"greenHeartNormal")) // new code
}
override func willActivate() {
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
newBeat()
NSTimer.scheduledTimerWithTimeInterval(8,
target: self,
selector: Selector("newBeat"),
userInfo: nil,
repeats: true)
//beat()
}
func newBeat() {
if ++currentBeatPatternIndex == beatPatternsArray.count {
currentBeatPatternIndex = 0
}
currentBeatPattern = beatPatternsArray[currentBeatPatternIndex]
heartSymbol = currentBeatPattern.heartImage ////// ERROR
}
/*
func beat() {
// 1
UIView.animateWithDuration(currentBeatPattern.duration / 2,
delay: 0.0,
options: .CurveEaseInOut,
animations: {
// 2
self.iconLabel.transform = CGAffineTransformScale(self.iconLabel.transform, self.shrinkFactor, self.shrinkFactor)
},
completion: { _ in
// 3
UIView.animateWithDuration(self.currentBeatPattern.duration / 2,
delay: 0.0,
options: .CurveEaseInOut,
animations: {
// 4
self.iconLabel.transform = CGAffineTransformScale(self.iconLabel.transform, self.expandFactor, self.expandFactor)
},
completion: { _ in
// 5
self.beat()
}
)
}
)
}
*/
对于基于图像资源文件的动画,请使用约定命名图像文件name+number.extension
,其中所有图像的名称和扩展字符串相同,数字值指示图像在动画序列中的位置。序列中第一个图像的编号必须为 0 或 1。例如,具有三个图像的动画可以具有文件名 image1.png、image2.png 和 image3.png。
建议将图像资源文件放在 WatchKit 应用的捆绑包中(而不是放在 WatchKit 扩展的捆绑包中)。通过将它们放置在 WatchKit 应用捆绑包中,可以使用此类的 setImageNamed:
方法来指定动画图像。您可以使用startAnimatingWithImagesInRange:duration:repeatCount:
方法启动动画。或者使用[UIImage animatedImageNamed:duration:]
创建动画图像,然后进行设置。