2014-10-23 1 views
4

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

Вот пример приложения, используя NSBox виды, чтобы обеспечить темный фон.

enter image description here

Мы можем видеть, что NSBox «первичное» появление удается накладывать фон и кнопки счастливо сидит на вершине этого. Однако на NSBox с настраиваемым внешним видом кнопка появляется, чтобы «вырезать» фон в виде визуального эффекта внизу.

Я пробовал подклассификацию NSVisualEffectView и переопределял -drawRect:, чтобы заполнить его другим цветом, и результат будет таким же.

Есть ли способ наложения ярких элементов управления на другие виды?

ответ

1

Визуальный эффект, кажется, имеет два важных слоя: фон и оттенок. Установка обоих из них на «правый» черный, похоже, делает трюк, но вам нужно сделать это в любое время, когда границы меняются.

for (CALayer *sublayer in self.vibrancyView.layer.sublayers) { 
    if ([sublayer.name isEqualToString:@"Backdrop"]) { 
     NSLog(@"Backdrop: %@", sublayer.backgroundColor); 
     sublayer.backgroundColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:0.45].CGColor; 
    } else if ([sublayer.name isEqualToString:@"Tint"]) { 
     NSLog(@"Tint: %@", sublayer.backgroundColor); 
     sublayer.backgroundColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor; 
    } 
} 
+0

Я не могу заставить это работать. Выполняете ли вы смешение внутри окна или смешение за окном? – joerick

+0

Внутри окна. Используя тот же метод, можете ли вы зарегистрировать подслои пустого визуального эффекта, чтобы увидеть, что доступно для игры? –

+0

Ах. Мне нужно смешение за окном. Но я попытался выполнить регистрацию слоев в 'setFrame:' ​​и 'setBounds:' в NSView, там ничего не было. Думаю, они были настроены после прохода макета. – joerick

 Смежные вопросы

  • Нет связанных вопросов^_^