Повторное создание FaceTime NSTableview

Я пытаюсь воссоздать тот же вид, что и в FaceTime. В левом табличном представлении есть NSVisualEffectView, выполняющий некоторое смешивание в окне с NSTableView, сидящим поверх него, или я предполагаю, что...

Я смог добиться этого, сделав мои прокрутки, Tableview и RowView прозрачными, и все выглядит великолепно, но моя проблема заключается в том, что я хотел бы, чтобы мой текст в каждом элементе строки реагировал на внешний вид представления визуального эффекта.

Я попытался настроить каждое из представлений (NSTableView, NSScrollView и т. д.), чтобы разрешить Vibrancy, но мои цвета, такие как LabelColor, не реагируют на представление визуальных эффектов, сидящее позади...

Кто-нибудь добился успеха в этом?


person Sammy The Hand    schedule 15.04.2015    source источник
comment
Мне удалось поместить NSVisualEffectView в ячейку строки, но это не кажется хорошей идеей. Количество представлений эффектов становится помехой, и я уже вижу, что NSButtons в моих ячейках отстают, когда у меня есть несколько представлений эффектов.   -  person Sammy The Hand    schedule 17.04.2015


Ответы (1)


Итак, после долгих игр, я думаю, что добился небольшого успеха.

Две проблемы, которые мне пришлось решить:

  • Кнопки обнаруживают как 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);
}
person Sammy The Hand    schedule 23.04.2015