Быстрый результат arc4random_uniform не всегда отображается в метке - PullRequest
0 голосов
/ 05 июня 2018

Я недавно начал изучать Swift и проходил учебник .Идея состоит в том, чтобы создать игру BullEye.У меня возникла проблема с отображением случайно сгенерированного значения.

Эта ошибка появляется случайно.Иногда у меня есть серия нормально отображаемых значений, иногда серия «...» вместо значений.

Value is not displayed

Вот мой код:

import UIKit

class ViewController: UIViewController {
    var currentValue = 0
    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var targetLabel: UILabel!
    @IBOutlet weak var scoreLabel: UILabel!
    @IBOutlet weak var roundLabel: UILabel!
    var targetVal = 0
    var score = 0
    var round = 1

    override func viewDidLoad() {
        super.viewDidLoad()

        currentValue = lroundf(slider.value)
        startRound()
    }

    @IBAction func sliderMoved(_ slider: UISlider){
        print("The value is now: \(slider.value)")
        currentValue = lroundf(slider.value)
    }

    @IBAction func showAlert(){
        let diff = abs(targetVal-currentValue)
        let points = 100 - diff

        score += points
        round += 1

        let message = "You scored \(points)"

        let alert = UIAlertController(title: "Hello, world!", message: message, preferredStyle: .alert)

        let action = UIAlertAction(title: "Awesome", style: .default, handler: nil)

        alert.addAction(action)

        present(alert, animated: true, completion: nil)

        startRound()
    }

    func startRound(){
        updateLabels()
        targetVal = 1 + Int(arc4random_uniform(100))
        currentValue = 50
        slider.value = Float(currentValue)
    }

    func updateLabels(){
        targetLabel.text = String(targetVal)
        scoreLabel.text = String(score)
        roundLabel.text = String(round)
    }
}

Перемещение updateLabels () внутри startRound () не имеет значения.В первом раунде значение всегда отображается.

1 Ответ

0 голосов
/ 05 июня 2018

Ваша метка недостаточно широка для длинных значений.Позвоните sizeToFit() на этикетке после обновления текста.

targetLabel.text = String(targetVal)
targetLabel.sizeToFit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...