2016-07-07 29 views

答えて

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メソッドを実装し、ビューのフレームの変更に基づいてビューのコーナー半径を調整することもできます。

最後に、ビューのフレームでキー値の通知を購読できる必要があります。

関連する問題