Objective-C desktop Cocoa ap. Приложение представляет собой очень специфический краевой регистр (автономный киоск с одноконтактным интерфейсом). Я упоминаю это первым в надежде избежать лекции HIG. ;)Как отображать модальный лист в полноэкранном режиме NSWindow без визуального переключения окна хоста?
Я использую модальный вид листа, чтобы отобразить документ PDF поверх моего обычного содержимого. Код очень прост:
[docViewerHostWindow beginSheet:docViewer completionHandler:nil];
DocViewerHostWindow является NSWindow доступа как родитель NSView, который вызывает лист. Если это имеет значение, «docViewer» является подклассом NSWindow, содержащим PDFView.
Когда приложение работает в окне, все работает как должно. Когда приложение работает в полноэкранном режиме, все работает так, как рекламируется, но есть визуальный глюк: весь контент за моделью сдвигается вправо, пока лист не будет отклонен. Кажется, это преднамеренно (и анимировано), но я не могу понять, откуда он или как его отключить.
вхожу полноэкранным так:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO],NSFullScreenModeAllScreens,nil];
[self enterFullScreenMode:[NSScreen mainScreen] withOptions:options];
Этот основной NSLog иллюстрирует проблему:
NSLog(@"Before: %f,%f",docViewerHostWindow.frame.origin.x,docViewerHostWindow.frame.origin.y);
[docViewerHostWindow beginSheet:docViewer completionHandler:nil];
NSLog(@"After: %f,%f",docViewerHostWindow.frame.origin.x,docViewerHostWindow.frame.origin.y);
**Log when running windowed (same origin before and after) **
2015-08-09 22:52:46.641 Before: 311.000000,491.000000
2015-08-09 22:52:47.050 After: 311.000000,491.000000
**Log when running fullscreen (origin shifts in fullscreen) **
2015-08-09 22:52:46.641 Before: 0.000000,0.000000
2015-08-09 22:52:47.050 After: 80.000000,-23.000000
I HAV e попытался заставить источник окна как до, так и после открытия листа, но это не помогло. Я даже не уверен, где искать - какие-либо подсказки о том, что вызывает это и почему?
Update: Чтобы быть ясно, что я не говорю об анимации по умолчанию на самом листе (как описано в this question), а это то, что происходит с окном хозяина, но только в полноэкранном режиме.
Поддерживаете ли вы свой док в левой части экрана? Эти цифры выглядят как окно, расположенное, чтобы избежать док-станции и панели меню. Если Dock - это позиция, в которой находилось окно, прежде чем вы разместите представление в полноэкранном режиме? –
Ах! Это именно то, что есть ... если я переведу док-станцию на дно, содержимое окна сместится вместо правого. Я все еще не уверен, как отключить это поведение, и я не уверен, почему это происходит на вторичных мониторах, а также на первичных (поскольку там нет док-станции). Дает мне хорошее преимущество, но, спасибо. – andrew
@KenThomases Я собираюсь отредактировать вопрос, чтобы включить ответ, который я нашел (с помощью формы вашего понимания) в отношении режима киоска. Я все еще думаю, что должен быть способ избежать этого (кажется странным уклоняться от невидимой док-станции в полноэкранном режиме), но если у кого-то еще нет идей, и вы хотели бы написать это как ответ, я соглашусь с ним. Спасибо за вашу помощь! – andrew