我有一个使用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所指的逻辑坐标系是什么...
这是我的解决方案-使用不同的功能来绘制PDF。我仍然不确定我是否理解为什么在以pdf和屏幕绘制时系统无法始终如一地运行。