NSWindow orderOut - есть ли способ дождаться закрытия окна?

В моей программе у меня есть окно, в котором пользователь размещает на экране ту часть, которую он хочет сфотографировать.

Затем, когда он нажимает кнопку, чтобы сделать снимок, моя программа orderOutЭто окно, делает снимок экрана и снова показывает окно, теперь со скриншотом в нем.

Проблема в, orderOut похоже, не закрывает окно сразу. Поэтому, когда я делаю скриншот, он обычно делает скриншот самого окна (которое должно было быть закрыто), что, очевидно, не то, что я хочу.

Я смог обойти проблему, позвонив sleep(1) после звонка orderOut, но наверняка есть лучший способ?

1 ответ

Согласно документации здесь. Окно делает анимацию, когда вы вызываете orderOut. Следовательно, вы можете удалить анимацию orderOut, установив поведение анимации на none:

[myWindow setAnimationBehavior:NSWindowAnimationBehaviorNone]

или используйте метод NSObject e xecuteSelector: withObject: afterDelay: для выполнения операции снимка экрана через определенное время x. Предполагая, что анимация NSWindow orderOut использует длительность по умолчанию, задержка будет равна 0,2f. В противном случае вы можете сделать несколько тестов, чтобы проверить, какое значение подходит для вашего случая.

Другие вопросы по тегам