2016-07-07 3 views
0

Я хочу связать раму UIView с ее угловым радиусом так, чтобы Угловой радиус вида остается 1/2 ширины кадра вида. если изменяется вид кадра он запускает его угловую значение радиусаКак связать свойства UIView

Я надеюсь, что решение, которое может быть обобщена для свойств класса за UIView

ответ

1

попробовать это:

view.layer.cornerRadius = view.bounds.width * 0.5 

Также два метода вызывается всякий раз, Изменение границ:

viewWillLayoutSubviews() и viewDidLayoutSubviews(), вы можете изменить его радиус.

Я бы решить эту проблему с расширением:

extension UIView { 
    func changeFrameAndCorner(frame: CGRect) { 
    self.frame = frame 
    self.layer.cornerRadius = view.bounds.width * 0.5 
} 
+0

Он особо сказал, что если каркас меняется, он хочет, чтобы cornerRadius оставался на 50% от ширины. Это обеспечивает решение для начальной ширины кадра, но не для увеличения – Emptyless

1

Вам нужно переписать методу setFrame

- (void)setFrame:(CGRect)frame { 
    super.frame = frame; 
    self.layer.cornerRadius = /// 
} 

Если это не ваш вид вы можете использовать KVC и наблюдать, когда изменения просмотров кадра (в случае необходимости может введите код, но интернет полон его ...). И чем когда он изменит, обновите свой угловой радиус.

В противном случае вам необходимо использовать некоторые библиотеки для реактивной программы (Reactive Cocoa, RxSwift, Bond и т. Д.).

Надеюсь, это помогло вам.

1

Вы можете создать собственный подкласс UIView и переопределить setFrame в качестве предлагаемого @Volodymyr. Однако это не будет работать для системных классов.

Возможно, вы также можете реализовать метод viewDidLayoutSubviews в своем контроллере просмотра и отрегулировать радиус угла зрения на основе любых изменений в рамке представления.

Наконец, вы можете подписаться на уведомления о значении ключа на кадре представления.

Смежные вопросы