Swift macOS绘制一个内部有两个孔的矩形
我有一个大CGRect和两个小CGRect在里面。我想画红色的大CGRect,并形成两个对应于小CGRect的透明孔Swift macOS绘制一个内部有两个孔的矩形,swift,macos,core-graphics,mask,cgrect,Swift,Macos,Core Graphics,Mask,Cgrect,我有一个大CGRect和两个小CGRect在里面。我想画红色的大CGRect,并形成两个对应于小CGRect的透明孔 我做不到。我曾尝试使用NSBezierPath,但在macOS中没有像iOS的UIBezierPath那样的NSBezierPath.CGPath方法。您不必使用核心图形。您可以创建一个NSView子类,只需笔划/填充在绘图(\)中的路径即可。在Swift 3中: class HolyView: NSView { override func draw(_ dirtyRe
我做不到。我曾尝试使用NSBezierPath,但在macOS中没有像iOS的UIBezierPath那样的NSBezierPath.CGPath方法。您不必使用核心图形。您可以创建一个
NSView
子类,只需笔划
/填充
在绘图(\)
中的路径即可。在Swift 3中:
class HolyView: NSView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let path = ... // build the `NSBezierPath` however you want
NSColor.blue.setFill()
path.fill()
}
}
然后,您可以通过编程方式添加该视图,或者将其设置为可设计的,并直接添加到故事板上
两件事:1)路径如何“知道”在哪里绘制,我的意思是我希望传递一个
cgContext
的引用或其他东西。2) 现在我尝试实现这个解决方案,是否也可以使用层?只需将其添加到视图层次结构中即可。您只是想显示视图,还是出于某种原因需要使用CoreGraphics“cgContext
”?偶数/奇数规则缠绕规则将使用填充颜色填充交点。如果你不想让它这样做,你必须为相交的圆定义一条路径(例如,不是两个完整的圆,而是两个局部圆弧,它们的起点和终点角度被仔细选择,以停止在另一个拾取的地方;需要一些基本的三角,但这并不难)。谢谢。我意识到这个答案,解决了我的问题,不适合我原来的问题。因此,我将在另一个答案中详细介绍。目前,我认为这是最好的问题!这里是问题@Rob