如何绑定UIView的属性

时间:2016-07-07 16:26:29

标签: ios swift reactive-programming

我想将UIView框架与其Corner半径绑定 视角的半径保持视图框架宽度的1/2。 如果视图框改变,则触发其角半径值

我希望能够为UIView之外的类属性进行广义化的解决方案

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

您需要重写setFrame方法

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

如果不是你的观点,你可以使用KVC并观察视图框架的变化(如果需要可以提供代码,但是互联网充满了它......)。而且当它改变时更新你的角半径。

否则你需要使用一些库进行反应式编程(Reactive Cocoa,RxSwift,Bond等)。

希望它对你有所帮助。

答案 2 :(得分:1)

您可以创建UIView的自定义子类并覆盖setFrame,如@Volodymyr建议的那样。但是,这对系统类不起作用。

您也可以在视图控制器中实施viewDidLayoutSubviews方法,并根据对视图框架的任何更改调整视图的角半径。

最后,您应该能够在视图框架上订阅键值通知。