如何使用CALayer在NSCollectionViewItem中绘制图像

时间:2019-10-16 13:12:30

标签: swift macos calayer nsimage nscollectionview

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

0 个答案:

没有答案