我想在我的应用程序中展示几张彼此叠加的矢量图像,并且可能有数百张这些图像。我读到,使用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图像。
答案 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)
}