NSImageView,用于NSTableView中

时间:2018-08-07 14:58:16

标签: swift cocoa core-animation

我有一个基于视图的NSTable。使用tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?构造创建一行视图。所有这些都很好。

在创建的单元格视图中是Avatar,它是NSImageView的子类。我正在尝试修改Avatar,以使NSImageView被舍入并填充宽高比-输入图像可以是任何尺寸的集合,因此需要进行长宽比填充以确保图形表达保持圆形/未填充

我找到了contentsGravitycornerRadius,并认为这可能很简单-哦,我错了!

该图像从Internet位置缓存到文件系统上,可能无法立即使用,因此我怀疑我的某些问题始于此。

我尝试过的事情:

  1. 使用getter / setter覆盖Avatar.image,这是从Google搜索中向我建议的,例如:

    override var image: NSImage? {
        set {
            super.layer?.contentsGravity = kCAGravityResizeAspectFill
            super.layer?.cornerRadius = (self.frame.height)/2
            super.layer?.masksToBounds = true
            super.wantsLayer = true
            super.canDrawSubviewsIntoLayer = true
            super.image = newValue
        }
    
        get {
            return super.image
        }
    }
    
  2. 与上面的基本相同,但是在makeRounded类中作为Avatar类的函数而不是作为setter来进行,然后在设置了{ makeRounded

  3. 删除并重新添加了用于修改图层,蒙版,半径,重力的各种线条,以查看单个线条是否是我的问题的根源。 (这并没有使我更接近解决问题。)

实际发生的事情:

  • 上下滚动表时的行为完全不可预测-我想视图有时会被逐出并重画?
  • 某些项目正确显示为圆形,而其他项目则错误显示为正方形。
  • 长宽比填充似乎无法可靠地运行(如果有的话)。如果某些内容确实显示为舍入并且尺寸不合适,则它会被裁剪。
  • 有些图像根本不渲染,看似随机!

目前还不确定我是否遗漏了明显的东西或只是迷失了方向。

问题:

  1. 在某些示例中,我看到在修改NSImage之前使用了super.layer? = CALayer.init()。我似乎无法确定将其放入或删除是否会使情况变得更好或更糟?

  2. 没有layer,我会遇到各种图形失真-这是正常现象吗?

  3. 如果我也没有设置canDrawSubviewsIntoLayerkCAGravityResizeAspectFill真的在做什么吗?

  4. 显然,从我看到的其他帖子中,super.layer?.content的位置也很重要,但是我将其移至其他各种图层或图像线的上方和下方都没有成功。

    < / li>

我到底在哪里错了?

0 个答案:

没有答案