我在newBeat()函数中尝试self.heartSymbol.setImage(currentBeatPattern.heartImage)
但没有加载heartImages。我该怎么办?
如果我使用self.heartSymbol.setImage(UIImage(named:"greenHeartNormal"))
之类的东西,单个图像加载正常,但正如您从我的数组和我的newBeat()函数中看到的那样,我试图通过数组加载图像并输出到IBOutlet。
这个想法是每个图像应该出现在屏幕上并且每个图像脉冲几秒钟,并且bpmLabel也随之改变值。动画不能在WatchKit中工作,所以我现在已经注释掉了beat()函数。但我仍然喜欢用数组中的静态图像和bpmLabel来做这件事。使用注释掉的beat()函数,如何编辑它以便在没有脉冲iconLabel变换动画的情况下获得延时的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()
}
)
}
)
}
*/
答案 0 :(得分:1)
对于基于图像资源文件的动画,使用约定name+number.extension
命名图像文件,其中所有图像的名称和扩展名字符串相同,数字值表示动画序列中图像的位置。序列中第一个图像的编号必须为0或1.例如,包含三个图像的动画可以包含文件名image1.png,image2.png和image3.png。
建议您将图片资源文件放在WatchKit应用程序的包中(而不是在WatchKit扩展程序包中)。将它们放在WatchKit应用程序包中,可以使用此类的setImageNamed:
方法指定动画图像。您可以使用startAnimatingWithImagesInRange:duration:repeatCount:
方法开始动画。或者使用[UIImage animatedImageNamed:duration:]
创建动画图像然后进行设置。