SwiftUI:不同侧面的动画旋转

Ces*_*are 5 animation swiftui

乍一看问题很普通,但花了几个小时尝试不同的技术后,我仍然未能实现预期的行为...我想控制View依赖于的旋转侧@State。如果视图处于默认位置(V 形向上),它应该从右侧向下旋转。如果 V 形向下,它应该从左侧向上旋转。

我发现的另一件事是:在我的工作项目中,我使用 Image 代替 SF Symbol,并进行与代码示例中相同的修改,默认情况下它总是从右侧旋转,但使用 SF Symbol 时它从左侧旋转。如果您解释原因,我将不胜感激

struct Arrow: View {
    @State var showView = false
    var body: some View {
        VStack {
            Image(systemName: "chevron.up.circle")
                .resizable()
                .frame(width: 50, height: 50)
                .rotationEffect(.degrees(showView ? 180 : 360))
                .animation(Animation.easeInOut(duration: 0.3), value: showView)
        }
        .onTapGesture { showView.toggle() }
    }
}
Run Code Online (Sandbox Code Playgroud)

vac*_*ama 9

要始终沿同一方向旋转,请rotationAngle在设置动画时保持始终增加(或始终减少)的 a:

struct ContentView: View {
    @State private var showView = false
    @State private var rotationAngle: Double = 0
    
    var body: some View {
        VStack {
            Image(systemName: "chevron.up.circle")
                .resizable()
                .frame(width: 50, height: 50)
                .rotationEffect(Angle(degrees: rotationAngle))
            
        }
        .onTapGesture {
            showView.toggle()
            withAnimation(.easeInOut(duration: 0.3)) {
                rotationAngle += 180
            }
            rotationAngle = showView ? 180 : 0
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:用于rotationAngle -= 180向另一个方向旋转。


在模拟器中显示 V 形的旋转