从外部观看触发动画

时间:2020-08-14 08:05:26

标签: swift swiftui

我要制作动画视图,单击后它将旋转。

像这样:

struct AnimatedView: View {
    
    @State var degree: Double = 0.0
    
    var body: some View {
        ZStack {
            Image("picture")
                .rotationEffect(.degrees(degree))
                .animation(
                    Animation.linear(duration: 2)
            )
            Button(action: {
                self.degree = 180.0
            }) {
                Text("animate").frame(width: 100, height: 100)
            }
        }
    }
    
    func active() {
        self.degree = 180.0
    }
}

我将此视图放置在ContentView中,并且希望通过不在该视图中的其他按钮激活动画。

我发现功能有效无法更改值,因此动画无法开始。

我知道在ContentView中使用@Blinding保持度变量可能有效,但是我不希望在其中使用太多变量。

1 个答案:

答案 0 :(得分:0)

如您所说,您需要使用@Binding,即

struct ContentView: View {
    @State private var degree: Double = 0.0

    var body: some View {
        VStack {
            AnimatedView(degree: $degree)
            Button(action: {
                self.degree += 180.0
            }) {
                Text("animate")
            }
        }
    }
}

struct AnimatedView: View {
    @Binding var degree: Double

    var body: some View {
        Image(systemName: "checkmark")
            .rotationEffect(.degrees(degree))
            .animation(
                Animation.linear(duration: 2)
            )
    }
}