Если пользователь масштабирует главное окно нашего приложения, закрывает приложение, а затем снова открывает его, мы хотим восстановить последнее состояние главного окна, поэтому мы увеличиваем его до отображения окна. Приложение открывается с увеличением, поэтому все отлично.При повторном открытии приложения, как восстановить увеличенное состояние без проблем?
Однако, если пользователь снова нажимает кнопку масштабирования, ничего не происходит. Я считаю, что это объясняется тем, что documentation for zoom: говорит для шага 5:
Определяет новый кадр. Если в настоящее время окно находится в стандартном состоянии , новый кадр представляет собой пользовательское состояние, сохраненное во время предыдущего увеличения . Если окно в настоящее время находится в пользовательском состоянии, новый кадр представляет стандартное состояние, вычисленное на шаге 1 выше. Если нет сохраненного состояния пользователя, потому что ранее не было увеличения, размер и расположение окна не меняются.
Я думаю, что это не unzoom, потому что нет пользовательского состояния, но я не уверен, почему - не должен ли пользователь указывать, «размер окна был до того, как он был увеличен»? Если нет, как я могу убедиться, что пользовательское состояние установлено правильно, чтобы окно не увеличивалось, когда пользователь снова нажимает кнопку масштабирования?
Редактировать: MrGomez отвечает ниже, что это в основном то, как оно предназначено для работы. Однако это не похоже на то, как ведут себя другие приложения. Попробуйте Safari - увеличьте масштаб, затем закройте, затем снова откройте окно и восстановите его с увеличенным размером. Нажмите кнопку масштабирования, и она вернется к меньшему размеру. iCal - то же самое. Как это делают эти приложения?
Это не похоже на то, как ведут себя другие приложения. Попробуйте Safari - увеличьте масштаб, затем закройте, затем снова откройте окно и восстановите его с увеличенным размером. Нажмите кнопку масштабирования, и она вернется к меньшему размеру. iCal - то же самое. Как это делают эти приложения? – Colen
@Colen Насколько я знаю, они делают это [https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Tasks/SavingWindowPosition.html#//apple_ref/DOC/UID/20000229-BCIDIHBB). Я обновлю свой ответ, потому что он безрезультатен без него. – MrGomez
ОК, я создал небольшое тестовое приложение, которое ничего не делает, кроме вызова setFrameUsingName/saveFrameUsingName при запуске/завершении работы, чтобы сохранить и восстановить позицию окна. Если я запустил его, переместите его в другое место на экране, закройте его и перезапустите, новая позиция будет восстановлена. Если я увеличу его, закройте и перезапустите, увеличенное положение будет восстановлено. Все, как ожидалось, до сих пор. Тем не менее, если я затем нажму zoom, чтобы разблокировать его, он отключится до положения окна * по умолчанию *, а не нового * окна, которое я использовал. Я был бы в порядке с этим поведением - любая идея, как вызвать это? Спасибо за вашу помощь! – Colen