Пользовательский интерфейс не обновляется во время сброса для игры Simple Swift 4.2 - PullRequest
0 голосов
/ 14 июля 2020

Я новичок в разработке iOS и Swift, и мне нужна помощь с практическим приложением.

Это очень простая игра, в которой вы перемещаете ползунок, чтобы «угадать» цель / случайное число, и вы правы или неверны. Сама игра запускается и работает, но у меня возникли проблемы, когда я попытался добавить кнопку «Играть снова» для сброса пользовательского интерфейса для новой игры.

Проблема, которую я вижу, - это когда я нажимаю кнопку "Играть снова?" кнопка, пользовательский интерфейс не обновляется. Я пытаюсь скрыть ярлыки и изменить сообщения, но пользовательский интерфейс не меняется, как при воспроизведении игры.

Кто-нибудь знает, какую ошибку я делаю, в результате чего пользовательский интерфейс не обновляется, когда я нажмите "Играть снова?" (связано с функцией reset ()). Для справки, я использую Xcode 10.0 и Swift 4.2.

Спасибо!

Картинки скучной игры

enter image description here

enter image description here

введите описание изображения здесь

ViewController

import UIKit

class ViewController: UIViewController {

    var targetNumber = 0
    @IBOutlet weak var message: UILabel!
    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var resultLabel: UILabel!
    @IBOutlet weak var playAgainBtn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        playAgainBtn.isHidden = true
        
        targetNumber = Int(arc4random_uniform(101))
        message.text = "Move slider to: \(targetNumber)"
    }
    
    func correct() {
        resultLabel.text = "Bullseye!"
        resultLabel.backgroundColor = UIColor.green
    }
    
    func wrong() {
        resultLabel.text = "Whoops! Not very good at this, are you?"
        resultLabel.backgroundColor = UIColor.red
    }

    func scoreInRange() -> Bool {
        let allowed_error = 3
        
        return Int(slider.value) >= Int(targetNumber) - allowed_error && Int(slider.value) <= Int(targetNumber) + allowed_error
    }
    
    @IBAction func reset(_ sender: Any) {
        slider.setValue(50.0, animated: false)
        
        targetNumber = Int(arc4random_uniform(101))
        message.text = "Move slider to: \(targetNumber)"
        
        resultLabel.isHidden = true
        playAgainBtn.isHidden = true
    }
    
    @IBAction func score(_ sender: Any) {
        
        if scoreInRange() {
            correct()
        } else {
            wrong()
        }
        
        playAgainBtn.isHidden = false
    }
    
}
...