#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];
Вы можете создать метод, используя приведенный выше код 🙂