Отображение нескольких слоистых изображений в NSView - PullRequest
0 голосов
/ 08 октября 2018

Я хотел бы представить несколько векторных изображений, наложенных друг на друга в моем приложении, и их может быть несколько сотен.Я читал, что использование NSImageViews для этого не было хорошей идеей, потому что они довольно тяжелые и воспроизводятся процессором.Вместо этого я должен использовать один 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 голосов
/ 10 октября 2018

Я понял: проблема в том, что мне нужно было указать рамку для моих подслоев

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