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

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

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

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

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


person Christopher Ashworth    schedule 22.09.2008    source источник


Ответы (2)


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

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

person Jason Harris    schedule 14.10.2008

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

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

person Dan Udey    schedule 28.09.2008
comment
При всем уважении, эти комментарии не относятся к моей ситуации. Я перемещаюсь между двумя известными состояниями. Два простых варианта планировки в зависимости от доступного места. Взаимодействие работает очень хорошо, просто переходя от одного к другому, но было бы менее раздражающим, если бы его можно было анимировать. - person Christopher Ashworth; 01.10.2008
comment
Что бы это ни стоило, NSCollectionView тоже делает это (вы можете увидеть это в действии в примере кода IconCollection). Они, видимо, ждут спокойного периода, когда вы перестали тянуть. Я пытался написать аналогичный класс, и, безусловно, сложно заставить анимацию работать последовательно и правильно во время изменения размера. - person David Dunham; 17.03.2010