未在WKInterfaceImages IBOutlet中加载的图像

时间:2015-04-19 07:33:41

标签: ios swift watchkit

我在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()
                }
            )
        }
    )
}
*/

1 个答案:

答案 0 :(得分:1)

对于基于图像资源文件的动画,使用约定name+number.extension命名图像文件,其中所有图像的名称和扩展名字符串相同,数字值表示动画序列中图像的位置。序列中第一个图像的编号必须为0或1.例如,包含三个图像的动画可以包含文件名image1.png,image2.png和image3.png。

建议您将图片资源文件放在WatchKit应用程序的包中(而不是在WatchKit扩展程序包中)。将它们放在WatchKit应用程序包中,可以使用此类的setImageNamed:方法指定动画图像。您可以使用startAnimatingWithImagesInRange:duration:repeatCount:方法开始动画。或者使用[UIImage animatedImageNamed:duration:]创建动画图像然后进行设置。