重新创建FaceTime NSTableview

时间:2015-04-15 15:03:32

标签: nstableview osx-yosemite nsview nsvisualeffectview

我试图重新创建与FaceTime相同的外观。 左手表视图有一个NSVisualEffectView在窗口混合中做了一些与它坐在它上面的NSTableView,或者我假设......

我已经能够通过使我的scrollview,Tableview和RowView透明而且所有看起来都很棒来实现这一点,我的问题是虽然我希望每个行项目中的文本能够对视觉外观做出反应视觉效果观。

我已尝试设置每个视图(NSTableView,NSScrollView等)以允许Vibrancy,但我的颜色(如LabelColor)不会对坐在后面的视觉效果视图做出反应......

有人有过这方面的成功吗?

1 个答案:

答案 0 :(得分:0)

所以经过多次游戏后我觉得我已经取得了一些成功。

我必须解决的两个问题是:

  • 按钮检测NSAppearance和Material,并根据超视图设置更改其设计。您可以轻松更改NSView的外观,但据我所知,您只能更改NSVisualEffectView的材质。我希望获得与FaceTime窗口相同的外观,其中行是未选中时的Dark中的NSVisualEffectView和它们时的Light。通过在单元格中嵌入NSVisualEffectView可以实现这一点,但是当您在表格中添加按钮并加载行时,您会在将表格从一端拖到另一端时开始出现图形错误。
  • 我的想法是我需要减少VisualEffectViews,因此有一个嵌入我的TableView后面,并使所有行/剪辑/视图透明。我的问题在于,尽管我试图让每个视图都充满活力,但仍然无法将活力传递到我桌子上的细胞。这也没有解决获得具有不同活力效果的单个行的问题。

幸运的是,我还是想要使用自定义按钮,因此不需要担心材质方面,但是在选中时,我会使用Light NSVisualEffectView进行突出显示。我发现有数百个效果视图可能不是最好的,所以我想在选择时我需要在我的行和我的单元格之间绘制一个......但事实证明我设法找到了一种更简单的技术,在我的行视图上绘制透明的白色填充:

在我已经子类化的TableRowView类中:

override func drawSelectionInRect(dirtyRect: NSRect) {
    let color = NSColor(white: 1, alpha: 0.6)
    color.setFill()
    NSRectFill(dirtyRect);
}