Изменение альфа-версии фона окна, а не всего окна

#macos #cocoa #nswindow #alpha #appkit

#macos #cocoa #nswindow #альфа #appkit

Вопрос:

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

Есть ли способ просто изменить альфа-значение окна, а не вид содержимого внутри него?

 - (IBAction)chan&eTransparency:(id)sender { 
// Set the window's alpha value. This will cause the views in the window to redraw.
[self.window setAlphaValue:[sender floatValue]];}
  

Спасибо, Сами.

Ответ №1:

В документах Apple указан способ сделать это. Ключ в том, чтобы установить альфа окна back&roundColor на желаемое значение. Вы также должны убедиться, что для opaque свойства window установлено значение NO (которое YES установлено по умолчанию).

например.x.

 // At some point in your code...
[window setOpaque:NO];

// Then in your chan&eTransparency: method...
NSColor *back&roundColor = [window back&roundColor];
back&roundColor = [back&roundColor colorWithAlphaComponent:[sender floatValue]];

[window setBack&roundColor:back&roundColor];
  

Ответ №2:

Вот другой способ.

Предположим, self.window <— базовый вид, и эта альфа будет изменена (но точно поддельная). subView1, subView2 <- эти представления являются содержимым self.window. и их альфа не должна быть изменена.

 self.window.back&roundColor = [UIColor clearColor];

UIView* anAlphaView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.widht, self.window.frame.size.hei&ht)];
anAlphaView.back&roundColor = [UIColor blackColor]; // as you want
anAlphaView.alpha = 0.5f; // as you want.
[self.window addSubview:anAlphaView];
[anAlphaView release];

[self.window addSubview:subView1]; // you should add sub views to self.window
[self.window addSubview:subView2];
  

Вы можете создать метод, используя приведенный выше код 🙂