Как использовать CALayer для рисования изображения в NSCollectionViewItem - PullRequest
0 голосов
/ 16 октября 2019

Чтобы решить проблемы с производительностью в большом представлении коллекции, я пытаюсь заменить NSImageView с помощью CALayer () для рисования изображений внутри NSCollectionViewItem.

Код работает при использовании с простым NSView, но я не могузаставить его работать на NSCollectionViewItem;изображение не рисуется, только цвет фона.

func collectionView( _ collectionView: NSCollectionView, willDisplay item: NSCollectionViewItem, forRepresentedObjectAt indexPath: IndexPath )
{
    guard let image = NSImage( byReferencingFile: "test.jpg" ) else
    {
        return
    }

    let imageLayer = CALayer()

    item.view.wantsLayer = true
    item.view.layer?.addSublayer( imageLayer )

    imageLayer.frame            = CGRect(x: 0, y: 0, width: 100 , height: 100 )
    imageLayer.contents         = image
    imageLayer.masksToBounds    = true
    imageLayer.autoresizingMask = [ .layerHeightSizable, .layerWidthSizable ];
    imageLayer.contentsGravity  = CALayerContentsGravity.resizeAspect;
    imageLayer.backgroundColor  = CGColor(red: 67/255, green: 173/255, blue: 247/255, alpha: 1.0)

    imageLayer.setNeedsDisplay()
}

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

Чего мне не хватает со слоями вNSCollectionViewItem?

Редактировать:

Кажется, проблема в .setNeedsDisplay(). Удаление этой строки работает ...

...