В iOS 13 и Xcode 11 UIKit предоставляет возможность получить доступ к свойствам layer у подклассов UIControl. Для того чтобы это сделать, необходимо использовать концепцию Key-Value Coding (KVC) и Key-Value Observing (KVO).
Прежде всего, позвольте мне объяснить, что такое KVC и KVO. KVC - это механизм, который позволяет получить доступ к свойствам объекта посредством ключей, а не напрямую через синтаксис точки. KVO - это механизм, который позволяет отслеживать изменения свойств объектов.
Итак, для того чтобы получить доступ к свойствам layer у подклассов UIControl, вы можете использовать метод setValue(_:forKey:) класса UIControl:
yourControl.setValue(yourLayer, forKey: "layer")
где yourControl
- экземпляр класса UIControl, для которого вы хотите получить доступ к свойству layer, а yourLayer
- экземпляр класса CALayer, который вы хотите установить в качестве значения свойства layer.
Важно отметить, что это решение неофициальное и может нарушать принципы безопасности языка Swift. Однако, если вы абсолютно уверены в том, что необходимо получить доступ к свойству layer у подклассов UIControl, использование KVC является единственным вариантов в данном случае.
Например, если у вас есть экземпляр класса UIButton и вы хотите установить свойство cornerRadius для его layer с значением 10, вы можете сделать следующее:
let button = UIButton() let layer = button.layer layer.cornerRadius = 10 button.setValue(layer, forKey: "layer")
Теперь свойство layer вашего UIButton будет иметь значение, которое вы задали, и вы сможете его использовать для дальнейших манипуляций с анимацией, градиентами и т.д.
Но, так как это неофициальное решение, вам следует быть осторожным с его использованием и убедиться, что вы действительно нуждаетесь в доступе к свойству layer у подклассов UIControl.