這是我正在使用的代碼;我的計時器在底部。我不知道如何在計時器關閉時更改顏色。
import UIKit
import AVFoundation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func btnPressed1(_ sender: UIButton) {
sender.backgroundColor = sender.backgroundColor == UIColor.red ? UIColor.black : UIColor.red
}
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var progressBar1: UIProgressView!
let start = 5
var timer = Timer()
var player: AVAudioPlayer!
var totalTime = 0
var secondsPassed = 0
@IBAction func startButtonPressed(_ sender: UIButton) {
let startB = sender.titleLabel?.text
totalTime = start
progressBar1.progress = 0.0
secondsPassed = 0
titleLabel.text = "coffee timer"
timer = Timer.scheduledTimer(timeInterval: 1.0, target:self, selector: #selector(updateTimer), userInfo:nil, repeats: true)
}
@objc func updateTimer() {
if secondsPassed < totalTime {
secondsPassed = 1
progressBar1.progress = Float(secondsPassed) / Float(totalTime)
print(Float(secondsPassed) / Float(totalTime))
} else {
timer.invalidate()
titleLabel.text = "check coffee"
let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
}
我需要按鈕在我的計時器結束后將顏色變成紅色,如果可能的話,當按下按鈕時,顏色會變回黑色。
uj5u.com熱心網友回復:
您可以IBOutlet向按鈕添加一個,然后使用該出口在您的updateTimer例程中更新按鈕。
IBOutlet向按鈕添加 的另一種方法是將按鈕作為 的userInfo:引數傳遞Timer。
你可以傳遞任何你想要的東西,userInfo:而現在你只是傳遞nil. 如果更改nil為sender,則按鈕將傳遞給Timer。
timer = Timer.scheduledTimer(timeInterval: 1.0, target:self,
selector: #selector(updateTimer), userInfo: sender,
repeats: true)
然后,將Timer引數添加到updateTimer:
@objc func updateTimer(t: Timer) {
if let button = t.userInfo as? UIButton {
button.backgroundColor = .red
}
}
userInfo如果您有多個共享相同updateTimer代碼的按鈕,則使用更有意義。通過創建一個結構來保存secondsPassed,并button和傳遞一個結構userInfo:,你可以有使用多個計時器在同一時間多個按鈕和各Timer會知道哪個按鈕,它被分配到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401737.html
