SwiftUI过渡偏移

时间:2020-03-26 23:40:12

标签: swift swiftui

我有一个有偏移的圆。当我按下按钮时,圆圈会显示一个比例动画。问题在于动画不是从圆的偏移位置开始,而是从其原始位置开始。如何使动画从圆的偏移位置开始。

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

2 个答案:

答案 0 :(得分:2)

只需添加动画即可进行过渡,如下所示(已通过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)
            }
        }
    }
}

答案 1 :(得分:2)

使用对齐指南:

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

您可以了解有关对齐指南here的更多信息。如@Asperi所述,.offset修饰符不会更改视图的位置。该视图仍处于(0,0),因此过渡发生在原点。如果要“物理”偏移视图,则应使用对齐参考线。

希望这会有所帮助。