Я пытаюсь создать анимацию, используя SwiftUI.
Start: [ A ][ B ][ D ]
End: [ A ][ B ][ C ][ D ]
Ключевые элементы анимации:
- C должно выскользнуть из-под B (не расширяться от нулевой ширины)
- Ширина всех видов определяется подпредставлениями и не известна
- Ширина всех подпредставлений не должна изменяться во время или после анимации (таким образом, общая ширина представления больше в конечном состоянии)
Мне очень трудно удовлетворить все эти требования с помощью SwiftUI, но в прошлом мне удалось добиться аналогичных результатов с помощью автоматического макета.
Моей первой попыткой был переход с использованием HStack
с layoutPriorities. Это не очень близко, потому что это влияет на ширину C во время анимации.
Моя вторая попытка состояла в том, чтобы сохранить HStack
, но использовать переход с асимметричной анимацией движения. Это было очень близко, но движение B и C во время анимации не дает эффекта, когда C находился непосредственно под B.
Моей последней попыткой было отказаться от использования HStack
для двух видов анимации и использовать вместо него ZStack
. С помощью этой настройки я могу добиться идеальной анимации, используя комбинацию offset
и padding
. Однако , я могу сделать это правильно, только если я сделаю размеры кадра B и C. известными значениями.
Есть ли у кого-нибудь идеи о том, как добиться этого эффекта без , требующего фиксированных размеров кадров для B и C?