Смещение перехода SwiftUI - PullRequest
       0

Смещение перехода SwiftUI

1 голос
/ 27 марта 2020

У меня есть круг, который имеет смещение. Круг появляется с анимацией масштаба, когда я нажимаю кнопку. Проблема в том, что анимация начинается не в смещенной позиции круга, а в исходной позиции. Как заставить анимацию начинаться в смещенной позиции круга.

Circle()
    .frame(width: 64, height: 64)
    .foregroundColor(.red)
    .transition(.scale)
    .offset(x: -69, y: 0)

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Просто добавьте анимацию к переходу, как показано ниже (протестировано с Xcode 11.4)

demo

struct Test: View {
    @State private var show = false
    var body: some View {
        VStack {
            Button("Tap") {
                withAnimation {
                    self.show.toggle()
                }
            }
            if show {
                Circle()
                    .frame(width: 64, height: 64)
                    .foregroundColor(.red)
                    .transition(AnyTransition.scale.animation(.default)) // here !!
                    .offset(x: -69, y: 0)
            }
        }
    }
}
0 голосов
/ 31 марта 2020

Используйте направляющие:

struct ViewsExercise: View {
    @State var show = true

    var body: some View {
        VStack(alignment: .leading, spacing: 20) {
            Spacer()
            Button("Tap") {
                self.show.toggle()
            }
            .font(.title)

            if show {
                Circle()
                    .frame(width: 64, height: 64)
                    .foregroundColor(.red)
                    .alignmentGuide(.leading, computeValue: { d in
                        64
                    })
                    .transition(AnyTransition.scale.animation(.easeInOut(duration: 1)))
            }
            Spacer()
        }
    }
}

enter image description here

Подробнее о направляющих вы можете узнать здесь . Как упоминалось в @Asperi, модификатор .offset не меняет положение просмотра. Представление по-прежнему находится в точке (0,0), поэтому переход происходит в исходной точке. Если вы хотите «физически» сместить вид, вам следует использовать направляющие выравнивания.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...