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

时间:2018-10-07 21:30:45

标签: image macos calayer 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图像。

1 个答案:

答案 0 :(得分:0)

我发现了:问题是我需要为子层指定一个框架

@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)
}