将多个分层图像显示到 NSView 中

Displaying several layered images into an NSView

我想在我的应用程序中展示几张叠加在一起的矢量图像,这些图像可能有数百张。我读到使用 NSImageViews 并不是一个好主意,因为它们非常重并且由 CPU 渲染。相反,我应该使用一个 NSView 和几个 CALayer 子层,其内容是我的图像。但我一定是遗漏了什么,因为我的 NSView 中似乎什么也没有出现。在我的情节提要中,我有一个 NSImageView 作为背景,最重要的是我有一个带有所有约束的 NSView,以使其具有与底层 NSImageView 相同的框架。然后我尝试将我的一张图像作为子层添加到 NSView 中,但它似乎没有显示:

@IBOutlet weak var mapImageView: NSImageView!
@IBOutlet weak var countriesView: NSView!

override func viewDidLoad() {
    super.viewDidLoad()

    mapImageView.image = NSImage(named: "world")?.tint(color: .white)

    countriesView.wantsLayer = true

    let usLayer = CALayer()
    usLayer.contentsGravity = .resizeAspect
    usLayer.contents = NSImage(named: "US")
    countriesView?.layer?.addSublayer(usLayer)
}

我错过了什么?

请注意,我不知道这是否相关,但我的图像是 PDF 图像。

我明白了:问题是我需要为我的子层指定一个框架

@IBOutlet weak var mapImageView: NSImageView!
@IBOutlet weak var countriesView: NSView!

override func viewDidLoad() {
    super.viewDidLoad()

    mapImageView.image = NSImage(named: "world")?.tint(color: .white)

    countriesView.wantsLayer = true

    let usLayer = CALayer()
    usLayer.contentsGravity = .resizeAspect
    usLayer.contents = NSImage(named: "US")
    usLayer.frame = countriesView!.layer!.frame
    countriesView?.layer?.addSublayer(usLayer)
}