У меня следующий код:
playView.layer.cornerRadius = 16
let gradient1 = CAGradientLayer()
gradient1.frame = playView.frame
gradient1.cornerRadius = 16
if #available(iOS 10.0, *) {
// set P3 colour
} else {
// set sRGB colour
}
gradient1.startPoint = CGPoint(x: 0, y: 0)
gradient1.endPoint = CGPoint(x: 1, y: 1)
playView.layer.insertSublayer(gradient1, at: 0)
В 3-й строке блока кода выше я установил рамку градиента, равную рамке, которую я хочу заполнить.
Когда я запускаю приложение на разных устройствах, слой градиента будет заполнять правильную область, только если устройство, на котором запущено приложение, выбрано в Интерфейсном Разработчике.
В настоящее время у меня есть код в viewDidLoad (), и поэтому проблему можно решить, переместив код в viewDidAppear (), но затем, когда приложение загрузится, перед появлением градиента будет небольшая задержка, не давая гладкий внешний вид.
Есть ли другой способ, которым я могу вставить код, чтобы градиент показывался в правильном месте, в то же время находясь там, как только пользователь увидит экран? Или, в качестве альтернативы, способ заставить градиент заполнить представление, сохраняя при этом код в viewDidLoad ()?
РЕДАКТИРОВАТЬ: viewWillAppear () не работает, равно как и viewWillLayoutSubviews (). Наверняка там должно быть, чтобы решить это?