Перемещение меток на внешнем экране

Я хочу переместить свои ярлыки на внешний дисплей. (например, displayRunsLabel вверху и по центру или, возможно, 40px справа и сверху)

У меня есть мои ярлыки на экране. В настоящее время я использую выравнивание текста.

Какой лучший способ сделать это?

Вот мой внешний дисплей:

ExternalDisplayScreenshot

Скриншот

Вот код:

 // CUSTOMISE VIEW
        secondScreenView.backgroundColor = UIColor.black
        displayWicketLabel.textAlignment = NSTextAlignment.left
        displayWicketLabel.font = UIFont(name: "Arial-BoldMT", size: 200.0)
        displayWicketLabel.textColor = UIColor.white
        displayWicketLabel.frame = secondScreenView.bounds
        secondScreenView.addSubview(displayWicketLabel)
        displayRunsLabel.textAlignment = NSTextAlignment.center
        displayRunsLabel.font = UIFont(name: "Arial-BoldMT", size: 200.0)
        displayRunsLabel.textColor = UIColor.white
        displayRunsLabel.frame = secondScreenView.bounds
        secondScreenView.addSubview(displayRunsLabel)
        displayOversLabel.textAlignment = NSTextAlignment.right
        displayOversLabel.font = UIFont(name: "Arial-BoldMT", size: 200.0)
        displayOversLabel.textColor = UIColor.white
        displayOversLabel.frame = secondScreenView.bounds
        secondScreenView.addSubview(displayOversLabel)
    }

1 ответ

Решение

Положение метки или любого другого UIView является origin его frame, который представляет собой CGPoint, представляющий его верхний левый угол.

Итак, вы сейчас говорите:

    displayWicketLabel.frame = secondScreenView.bounds
    displayRunsLabel.frame = secondScreenView.bounds
    displayOversLabel.frame = secondScreenView.bounds

Ну, это довольно глупо, потому что вы дали всем трем меткам один и тот же кадр! Таким образом, они накладываются друг на друга, и (как вы правильно говорите) вы можете читать их, только давая им различные выравнивания текста.

Вместо этого дайте им каждый отдельный кадр - тот, который помещает метку туда, где вы хотите. Например:

    displayWicketLabel.sizeToFit()
    displayWicketLabel.frame.origin = CGPoint(x:30, y:20) // or whatever
    displayRunsLabel.sizeToFit()
    displayRunsLabel.frame.origin = CGPoint(x:30, y:100) // or whatever
    displayOversLabel.sizeToFit()
    displayOversLabel.frame.origin = CGPoint(x:30, y:200) // or whatever

После всего сказанного ясно, что в коде, который я только что показал вам, есть один недостаток: мы произвольно жестко закодировали позиции, не принимая во внимание размер окна (внешний дисплей). По этой причине гораздо лучше будет узнать об автоматической разметке, которая позволит вам автоматически размещать три метки в удобных положениях в зависимости от размера окна.

Другие вопросы по тегам