Как изменить изображения в пользовательском интерфейсе по времени в Swift - PullRequest
0 голосов
/ 23 января 2020

Я делаю приложение iWatch. При этом пользователь должен идти 6 минут. В этом я показываю таймер. В соответствии с этим, я должен изменить ходячие изображения. Я изменил 8 изображений. как image1.png, image2.png, et c to image8.png

Как изменить изображение в зависимости от продолжительности времени.

Я новичок в языке Swift.

    @IBOutlet weak var walkingImage: WKInterfaceImage!
    let walkingImagesArray = ["walking1.png", "walking2.png", "walking3.png","walking4.png", "walking5.png","walking6.png", "walking7.png", "walking8.png"]

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
        self.startTimer()
}

    func startTimer() {
        self.countdownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.updateTime), userInfo: nil, repeats: true)
    }


    @objc func updateTime() {
        count = count + 1
        if(count < 361) {
            timerLabel.setText(String(timeString(time: TimeInterval(count))))
           //here I have to use switch case to change image
        } else {
            print("Workout completed")
            countdownTimer.invalidate()
            session.end()
            builder.endCollection(withEnd: Date()) { (success, error) in
                self.builder.finishWorkout { (workout, error) in
                    DispatchQueue.main.async() {
                        self.session = nil
                        self.builder = nil
                    }
                }
            }
        }
        print("\(count)")
    }

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

В случае менее чем 60 секунд результирующее изображение имеет название «alking0.png »

Решение:

func image(time: Int) -> String {
    let sekInt = time / 60
    let sek = String(sekInt)
    return "walking\(sek).png"
}

self.walkingImage.setImage(UIImage(contentsOfFile: image(time:count)))

Единичные тесты:

func testExample() {
    XCTAssertEqual(image(time: 360), "walking6.png")
    XCTAssertEqual(image(time: 359), "walking5.png")
    XCTAssertEqual(image(time: 301), "walking5.png")
    XCTAssertEqual(image(time: 300), "walking5.png")
    XCTAssertEqual(image(time: 299), "walking4.png")
    XCTAssertEqual(image(time: 61), "walking1.png")
    XCTAssertEqual(image(time: 60), "walking1.png")
    XCTAssertEqual(image(time: 59), "walking0.png")
    XCTAssertEqual(image(time: 1), "walking0.png")
    XCTAssertEqual(image(time: 0), "walking0.png")
}
0 голосов
/ 23 января 2020

Вы можете запустить таймер на 6 минут и менять свое изображение каждые 6 минут.

var timer: Timer?
var currentIndex: Int = 0
let walkingImagesArray = ["walking1.png", "walking2.png", "walking3.png","walking4.png", "walking5.png","walking6.png", "walking7.png", "walking8.png"]

func startTimer() {
    if let timer = timer {
        self.timer = timer

    } else {
        Timer.scheduledTimer(withTimeInterval: 360, repeats: true) { timer in
            //Change your image here
            self.currentIndex = self.currentIndex + 1
            self. walkingImage.image = self.walkingImagesArray[self.currentIndex]
        }
    }
}

func stopTimer() {
    self.timer?.invalidate()
    self.timer = nil
}
...