Как я могу запустить Core Animation на прокси-сервере аниматора во время вызова resizeSubviewsWithOldSize?

StackOverflow https://stackoverflow.com/questions/114970

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть несколько NSView, которые я помещаю в один из двух макетов в зависимости от размера моего окна.

Я корректирую макет, когда соответствующее суперпредставление получает метод resizeSubviewsWithOldSize.

Это работает, но я хотел бы анимировать изменения.Поэтому, естественно, я попытался вызвать прокси-сервер аниматора, когда установил новые кадры, но анимация не запускается, пока пользователь все еще перетаскивает.Если я отпущу мышь до того, как запланировано выполнение анимации, я увижу конец анимации, но ничего до этого момента.Я попытался убедиться, что для kCATransactionDisableActions установлено значение NO, но это не помогло.

Можно ли запустить новую анимацию и запустить ее во время изменения размера?

Это было полезно?

Решение

Я не думаю, что вы сможете сделать это легко, потому что анимация CA запускается через таймер, и таймер не срабатывает во время режимов цикла выполнения, которые активны, пока пользователь перетаскивает.

Если вы можете управлять циклом выполнения во время перетаскивания пользователем, поиграйте с режимами цикла выполнения.Это заставит это работать.Я не думаю, что вы можете изменить это на стороне CA.

Другие советы

На самом деле это не ответ, но я бы посоветовал не анимировать что-либо при перетаскивании для изменения размера окна.Экран уже анимируется (от перемещения окна) — дальнейшая анимация, скорее всего, будет визуально запутанной и посторонней.

Эффекты CoreAnimation лучше всего использовать для перехода из одного известного состояния в другое — например, когда размер окна настроек изменяется в соответствии с содержимым новой панели, и вы знаете как старый, так и новый размеры, или когда вы увеличиваете или уменьшаете размер объекта. (или оба).Выполнение анимации во время изменения размера окна будет визуально сбивать с толку, и пользователю будет сложнее сосредоточиться на достижении желаемого размера окна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top