2016-02-28 87 views
7

我想圓我右邊的角落,但僅適用於左角落UIBezierPath不TopRight角落BottomRight角落工作

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

的問題是,你得到的視圖邊界,它已經調整前爲當前設備。它比屏幕上出現的時間要長,因此圓角矩形的右側不在屏幕的右側。

您需要創建path並設置maskLayer.path後,視圖的大小已調整,這意味着在運行循環的佈局階段之中或之後。因此,無論是對視圖進行子類化並在視圖的layoutSubviews方法中執行,還是在視圖控制器的viewDidLayoutSubviews方法中執行。

+0

有見地,謝謝! – acib708

+0

謝謝!我很想知道爲什麼左邊的角落能夠正確渲染,但不是正確的。 – Seishin

1

如果您嘗試設置故事板或Xib上設計的View的RoundingCorners,請將角落和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