gpt4 book ai didi

ios - 在 UIView (Swift) 中绘制圆形切口

转载 作者:行者123 更新时间:2023-11-28 08:45:05 25 4
gpt4 key购买 nike

我正在尝试制作一个黑色的 UIView,中间有一个透明圆圈。到目前为止我的代码:

class MyView: UIView {

override var frame: CGRect {
didSet {
setNeedsDisplay()
}
}

override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
for subview in subviews as [UIView] {
if !subview.hidden && subview.alpha > 0 && subview.userInteractionEnabled && subview.pointInside(convertPoint(point, toView: subview), withEvent: event) {
return true
}
}
return false
}



override func drawRect(rect: CGRect) {

let contextRef = UIGraphicsGetCurrentContext()
let circleRect = CGRect(x: 67, y: 214, width: 240, height: 240)
CGContextAddEllipseInRect(contextRef, circleRect)
CGContextClip(contextRef)

CGContextSetRGBFillColor(contextRef, 0.0, 0.0, 0.0, 0.6)
CGContextFillRect(contextRef, rect)



}

}

在我的 UIViewController 中,我像这样初始化 View :

let blackView = MyView()
blackView.frame = view.frame
view.addSubview(blackView)

我只有一个全黑的屏幕,没有镂空。我在这里做错了什么?一个指针将不胜感激!谢谢。

编辑:如果可能的话,我需要在 drawRect 中执行此操作,并且在使用 pointsInside 转发触摸事件时不添加图层。

最佳答案

不是覆盖drawRect,而是使用CAShapeLayer作为 mask :

let blackView = UIView()
blackView.frame = view.frame
let mask = CAShapeLayer()
mask.path = UIBezierPath(ovalInRect: CGRectInset(view.frame, 30, 30)).CGPath
blackView.layer.mask = mask

关于ios - 在 UIView (Swift) 中绘制圆形切口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35533141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com