我在此应用中使用Timer进行了秒表计时,并添加了“开始停止”按钮以暂停和播放该秒表。 当按下按钮时,它将发送到使计时器无效的功能,并且应该停止。 但是当按下“停止”按钮时就足够了,而不是以某种方式停止了计时器 除了声明一次之外,我没有更改时间间隔。
我曾经尝试过禁用开始按钮,甚至将其隐藏。也尝试更改时间间隔,但没有任何效果。我按下启动停止按钮的次数越多,它的速度就越快,并且开始运行的速度比上述时间间隔要快得多。
startButton.frame = CGRect(x: 0, y: UIScreen.main.bounds.height * 0.9 , width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height * 0.1)
startButton.setTitle("Start Timer", for: .normal)
self.view.addSubview(startButton)
startButton.setTitleColor(.white , for: .normal)
startButton.backgroundColor = .red
startButton.addTarget(self, action: #selector(playButton(_:)), for: .allTouchEvents)
stopButton.frame = CGRect(x: 0, y: UIScreen.main.bounds.height * 0.9 , width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height * 0.1)
stopButton.setTitle("Stop Timer", for: .normal)
stopButton.setTitleColor(.white , for: .normal)
stopButton.backgroundColor = .red
stopButton.addTarget(self, action: #selector(pauseButton(_:)), for: .allTouchEvents)
@objc func playButton(_ sender : Any)
{
timer = Timer.scheduledTimer(timeInterval: 1, target: self , selector: #selector(updateTimer), userInfo: nil, repeats: true)
startButton.isEnabled = false
stopButton.isEnabled = true
isRunning = true
self.view.addSubview(stopButton)
startButton.isHidden = true
stopButton.isHidden = false
}
@objc func pauseButton(_ sender: Any) {
self.view.addSubview(startButton)
timer.invalidate()
stopButton.isHidden = true
startButton.isHidden = false
startButton.isEnabled = true
stopButton.isEnabled = false
isRunning = false
}
@objc func updateTimer(_ sender : Any)
{
counter += 0.1
titleLabel.text = String(format: "%.1f", counter)
}
答案 0 :(得分:1)
请尝试通过隐藏停止按钮来同时添加两个按钮,并在单击按钮时隐藏和取消隐藏按钮。尝试停止计时器时,您的播放按钮方法每次都会运行
答案 1 :(得分:1)
据我所知,您有2个错误。
第一个答案是另一个答案。确实建议您不要总是添加新的UIButton,而应仅对每个按钮使用hide / unhide属性。
第二个错误是如何添加目标。您正在使用.allTouchEvents,但是您可能打算将.touchUpInside用作控件状态。
请参见以下更正的代码供您参考:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
var startButton: UIButton!
var stopButton: UIButton!
var timer: Timer!
var counter: Double = 0.0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
startButton = UIButton(frame: CGRect(x: 0, y: UIScreen.main.bounds.height * 0.9 , width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height * 0.1))
startButton.setTitle("Start Timer", for: .normal)
startButton.setTitleColor(.white , for: .normal)
startButton.backgroundColor = .red
startButton.addTarget(self, action: #selector(playButton(_:)), for: .touchUpInside)
self.view.addSubview(startButton)
self.startButton.isHidden = false
stopButton = UIButton(frame: CGRect(x: 0, y: UIScreen.main.bounds.height * 0.9 , width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height * 0.1))
stopButton.setTitle("Stop Timer", for: .normal)
stopButton.setTitleColor(.white , for: .normal)
stopButton.backgroundColor = .red
stopButton.addTarget(self, action: #selector(pauseButton(_:)), for: .touchUpInside)
self.view.addSubview(stopButton)
self.stopButton.isHidden = true
}
@objc func playButton(_ sender : Any) {
timer = Timer.scheduledTimer(timeInterval: 1, target: self , selector: #selector(updateTimer), userInfo: nil, repeats: true)
startButton.isEnabled = false
stopButton.isEnabled = true
startButton.isHidden = true
stopButton.isHidden = false
}
@objc func pauseButton(_ sender: Any) {
timer.invalidate()
stopButton.isHidden = true
startButton.isHidden = false
startButton.isEnabled = true
stopButton.isEnabled = false
}
@objc func updateTimer(_ sender : Any)
{
counter += 0.1
titleLabel.text = String(format: "%.1f", counter)
}
}
答案 2 :(得分:1)
您已经有2个正确答案,但由于我认为您开始的前提不正确,所以我会加2p。
您最大的错误是首先拥有2个按钮。如果您只有一个按钮并根据需要设置样式,就不会有问题。
[HttpPost]
public IHttpActionResult Save(Company company)
{
var result = _companyRepository.Create(company);
return Ok(result);
}
这样,您需要维护的代码更少,并且隐藏/显示的内容之间没有冲突,因此,可能出错的内容更少。 魔术发生在buttonPress方法中,在该方法中,如果启动了计时器,则将其停止,否则启动一个计时器,然后快速更新按钮UI。