在我的應用程序中,我有一個方形的UIView,我想從上面切出一個孔/凹槽。網上的所有教程都是一樣的,看起來很直接,但他們中的每一個人總是提供與我想要的完全相反的東西。使用蒙版從UIView中切出一個圓圈
例如,這是自定義的UIView代碼:
class BottomOverlayView: UIView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
drawCircle()
}
fileprivate func drawCircle(){
let circleRadius: CGFloat = 80
let topMidRectangle = CGRect(x: 0, y: 0, width: circleRadius*2, height: circleRadius*2)
let circle: CAShapeLayer = CAShapeLayer()
circle.position = CGPoint(x: (frame.width/2)-circleRadius, y: 0-circleRadius)
circle.fillColor = UIColor.black.cgColor
circle.path = UIBezierPath(ovalIn: topMidRectangle).cgPath
circle.fillRule = kCAFillRuleEvenOdd
self.layer.mask = circle
self.clipsToBounds = true
}
}
這是我希望達到什麼樣的(淡藍色是UIView的,深藍色的背景):
但是,這是我取而代之的。 (每一次都不管我怎麼努力)
我不知道我怎麼會作出一個面具已經是我所需要的精確形狀實現這一目標,除了。但如果我能夠做到這一點,那麼我就不會在這個問題上擺在首位。有沒有人有任何提示如何實現這一目標?
編輯:這個問題,這應該是我已經嘗試過,但無法工作的副本。也許我做錯了,或者在錯誤的背景下使用它。我不熟悉任何給定的方法,並且使用指針使它看起來有些過時。被接受的答案在解釋如何使用更廣泛使用的UIBezierPaths以及在自定義UIView的上下文中解釋如何實現這個方面做得更好。
Reilem - 如果您想使用Matt的雙路徑和奇數的填充規則來繪製所有未被屏蔽的路徑,它就可以工作。我個人覺得,當我能夠畫出面具的路徑時,它是違反直覺的,但是對於他自己而言。無論如何,我用兩種方法更新了我的答案。 – Rob