У меня есть NSWindow, которое я отображаю модально в каком-то другом окне для отображения предупреждений.Код:
// This code is in MyAlert .m file. MyAlert inherits from NSWindow
- (void)showInWindow:(NSWindow *) {
[window beginSheet:self completionHandler:NULL];
}
Дело в том, что при компиляции с Xcode 10.1 на Mac под управлением Mojave я вижу серый «размытый» вид за предупреждением, которого я там не хочу: я хочу фоновое окногде это показано, чтобы быть видимым.
Тот же код, скомпилированный с Xcode 9.4.1, не показывает это размытое представление.
Кроме того, я отладил пользовательский интерфейс, и действительно есть NSVisualEffectView, вставленный в Xcode 10.1скомпилированная версия, которой нет при компиляции на 9.4.1, но я не могу найти способ избавиться от нее.Ниже приведены снимки экрана интерфейса пользователя, отлаженного в обеих версиях.
Кто-то сталкивалсяи понял это?
Обновление (минимальный проект, воспроизводящий проблему вставленного nsvisualeffectview) : http://s000.tinyupload.com/?file_id=43114618701497778758
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
__weak typeof(self)weakSelf = self;
NSView *contentView = self.window.contentView;
contentView.wantsLayer = YES;
[self.window setOpaque:NO];
[self.window setHasShadow:NO];
contentView.layer.backgroundColor = [NSColor redColor].CGColor;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf showAlert];
});
}
- (void)showAlert {
DummyAlertWindowController *alertController = [[DummyAlertWindowController alloc] initWithWindowNibName:@"DummyAlertWindowController"];
[self.window beginSheet:alertController.window completionHandler:^(NSModalResponse returnCode) {
;
}];
}
@implementation DummyAlertWindowController
- (void)windowDidLoad {
[super windowDidLoad];
self.properContentView.wantsLayer = YES;
self.properContentView.layer.backgroundColor = [NSColor blueColor].CGColor;
[self.window setOpaque:NO];
[self.window setHasShadow:NO];
self.window.contentView.wantsLayer = YES;
self.window.contentView.layer.backgroundColor = [NSColor clearColor].CGColor;
}
@end