Чтобы решить проблемы с производительностью в большом представлении коллекции, я пытаюсь заменить 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()
. Удаление этой строки работает ...