2016-02-28 3 views
7

私は私の右の角を丸くしたいのですが、唯一の左コーナーの作品がUIBezierPathは

let path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.TopRight], cornerRadii: CGSizeMake(20.0, 20.0)) 
let maskLayer = CAShapeLayer() 
    maskLayer.path = path.CGPath 
    view.layer.mask = maskLayer 
    view.layer.masksToBounds = true 
+0

を私は、画像を見ることができますか? – tktsubota

+0

あなた自身が投稿したものが正しいコードなので、もっとコードを投稿する必要があると思います。 – paulvs

答えて

20

問題は、それがリサイズされています前に、あなたはビューの境界を取得しているということですTopRightコーナー、BottomRightコーナーでは動作しません。現在のデバイスの画面に表示されるときよりも大きくなります。そのため、丸い四角形の右側が画面の右側から外れています。

pathを作成し、ビューのサイズを変更した後にmaskLayer.pathを設定する必要があります。これは、実行ループのレイアウトフェーズ中または後であることを意味します。したがって、ビューのサブクラス化をビューのlayoutSubviewsメソッドで行うか、ビューコントローラのviewDidLayoutSubviewsメソッドで行います。

+0

洞察を深めてください、ありがとうございます! – acib708

+0

ありがとうございます!私はかなりの時間の間、左隅が正しく描かれているが正しいものは描かれていないのか疑問に思っていた。 – Seishin

1

StoryboardまたはXibのデザインであるRoundingCorners for Viewを設定しようとすると、そのコーナーとMaskLayer.pathを以下のメソッドに設定してください。

override func viewDidLayoutSubviews() { 
// here you can write the code... 
    } 
7

スウィフト3

それは私の作品!

override func layoutSubviews() { 
    super.layoutSubviews() 
    DispatchQueue.main.async { 
     self.containerView.roundCorners(corners: [.topRight,.topLeft], radius: 25) 
     self.containerView.layer.masksToBounds = true 
    } 
    self.layoutIfNeeded() 
} 

現在のメソッド "roundCorners" を確認することができます:https://stackoverflow.com/a/41217863/3687902

+0

これは、正確にはUITableViewCellのロジックです。どうもありがとうございます。私が試した他の方法はありませんでした。 – tuttu47

関連する問題