Как я могу запустить Core Animation на прокси-сервере аниматора во время вызова resizeSubviewsWithOldSize?
-
02-07-2019 - |
Вопрос
У меня есть несколько NSView, которые я помещаю в один из двух макетов в зависимости от размера моего окна.
Я корректирую макет, когда соответствующее суперпредставление получает метод resizeSubviewsWithOldSize.
Это работает, но я хотел бы анимировать изменения.Поэтому, естественно, я попытался вызвать прокси-сервер аниматора, когда установил новые кадры, но анимация не запускается, пока пользователь все еще перетаскивает.Если я отпущу мышь до того, как запланировано выполнение анимации, я увижу конец анимации, но ничего до этого момента.Я попытался убедиться, что для kCATransactionDisableActions установлено значение NO, но это не помогло.
Можно ли запустить новую анимацию и запустить ее во время изменения размера?
Решение
Я не думаю, что вы сможете сделать это легко, потому что анимация CA запускается через таймер, и таймер не срабатывает во время режимов цикла выполнения, которые активны, пока пользователь перетаскивает.
Если вы можете управлять циклом выполнения во время перетаскивания пользователем, поиграйте с режимами цикла выполнения.Это заставит это работать.Я не думаю, что вы можете изменить это на стороне CA.
Другие советы
На самом деле это не ответ, но я бы посоветовал не анимировать что-либо при перетаскивании для изменения размера окна.Экран уже анимируется (от перемещения окна) — дальнейшая анимация, скорее всего, будет визуально запутанной и посторонней.
Эффекты CoreAnimation лучше всего использовать для перехода из одного известного состояния в другое — например, когда размер окна настроек изменяется в соответствии с содержимым новой панели, и вы знаете как старый, так и новый размеры, или когда вы увеличиваете или уменьшаете размер объекта. (или оба).Выполнение анимации во время изменения размера окна будет визуально сбивать с толку, и пользователю будет сложнее сосредоточиться на достижении желаемого размера окна.