如何根据 Swift 中的持续时间更改 UI 中的图像
How to change images in UI according to time duration in Swift
我在做iWatch应用。这样,用户必须步行 6 分钟。在那,我正在展示计时器。据此,我必须更改步行图像。我已经更改了 8 张图像。
像 image1.png、image2.png 等到 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)")
}
有什么建议吗?
如果少于 60 秒,生成的图像被命名为 "walking0.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")
}
您可以开始计时 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
}
我在做iWatch应用。这样,用户必须步行 6 分钟。在那,我正在展示计时器。据此,我必须更改步行图像。我已经更改了 8 张图像。 像 image1.png、image2.png 等到 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)")
}
有什么建议吗?
如果少于 60 秒,生成的图像被命名为 "walking0.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")
}
您可以开始计时 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
}