0

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

我已经能够通过使我的滚动视图、Tableview 和 RowView 透明并且看起来都很棒来实现这一点,但我的问题是我希望每个行项中的文本能够对视觉效果视图的视觉外观做出反应。

我尝试将每个视图(NSTableView、NSScrollView 等)设置为允许活力,但我的颜色(例如 LabelColor)没有对坐在后面的视觉效果视图做出反应......

有没有人在这方面取得任何成功?

4

1 回答 1

0

所以在玩了很多之后,我想我已经取得了一点成功。

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

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

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

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

override func drawSelectionInRect(dirtyRect: NSRect) {
    let color = NSColor(white: 1, alpha: 0.6)
    color.setFill()
    NSRectFill(dirtyRect);
}
于 2015-04-23T10:18:52.700 回答