应该使用什么CALayer绘制(在ctx:中)坐标以正确的比例绘制正确的点?

问题描述 投票:0回答:1

我有一个使用CALayers创建内容并希望以矢量格式生成pdf输出的NSView。首先,这是可能的,其次,Apple在其文档中引用的逻辑坐标系是什么,最后,您应该如何获取CALayers的默认背景和边框属性进行绘制?如果我使用这些属性,则不会将它们绘制到上下文中;如果我绘制边框,则这将复制属性设置。关于何时应该使用或不应该使用这些属性,或者在创建矢量输出时是否应该使用CALayers有点困惑。 pdf文件。

该视图具有以下几层:

  • 大于绘图区域的视图层
  • 包含图像和子层的图形层
  • 具有一些包含文字的矢量绘图的子图层

下面列出了NSView类和CALayer子类。

[视图层和绘图层在正确的位置绘制,但是所有绘图层子视图在错误的位置绘制并且尺寸错误。

我认为这是因为图形图层已应用了变换,而下面的图形没有考虑到这一点。这是问题吗,我将如何将图层转换应用于CGContext-如果这是解决方案-以便将事情放到正确的位置?

class DrawingView: NSView {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        guard let context = NSGraphicsContext.current?.cgContext else {
            return
        }
        // In theory should generate vector graphics
        self.layer?.draw(in: context)
        //Or
        // Generates bitmap image
        //self.layer?.render(in: context)
    }
}

class DrawingLayer: CALayer {

    override func draw(in ctx: CGContext) {
        drawBorder(in: ctx)
        if let subs = self.sublayers {
            for sub in subs {
                sub.draw(in: ctx)
            }
        }
    }
    func drawBorder(in ctx: CGContext){
        let rect = self.frame

        if let background = self.backgroundColor {
            ctx.setFillColor(background)
            ctx.fill(rect)
        }
        if let borders = self.borderColor {
            ctx.setStrokeColor(borders)
            ctx.setLineWidth(self.borderWidth)
            ctx.stroke(rect)
        }
    }
}
    

我有一个使用CALayers创建内容并希望以矢量格式生成pdf输出的NSView。首先,这是可能的,其次,Apple所指的逻辑坐标系是什么...

vector calayer nsview
1个回答
0
投票

这是我的解决方案-使用不同的功能来绘制PDF。我仍然不确定我是否理解为什么在以pdf和屏幕绘制时系统无法始终如一地运行。

© www.soinside.com 2019 - 2024. All rights reserved.