Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift macOS绘制一个内部有两个孔的矩形_Swift_Macos_Core Graphics_Mask_Cgrect - Fatal编程技术网

Swift macOS绘制一个内部有两个孔的矩形

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

我有一个大CGRect和两个小CGRect在里面。我想画红色的大CGRect,并形成两个对应于小CGRect的透明孔


我做不到。我曾尝试使用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