我想将UIView框架与其Corner半径绑定 视角的半径保持视图框架宽度的1/2。 如果视图框改变,则触发其角半径值
我希望能够为UIView之外的类属性进行广义化的解决方案
答案 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
方法,并根据对视图框架的任何更改调整视图的角半径。
最后,您应该能够在视图框架上订阅键值通知。