要解决大集合视图的性能问题,我尝试使用CALayer()替换NSImageView来在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()
上。删除该行有效...