第一个几何体动画之后的SwiftUI/移动对象

第一个几何体动画之后的SwiftUI/移动对象,swiftui,Swiftui,请您帮助更新代码,以便仅在第一个动画终止后,将绿色图像文本“有一件事是肯定的…”移动到其原始位置上方? (例如,“切换”文本下方) 谢谢 奥利维尔 请您帮助更新代码,以便仅在第一个动画终止后,将绿色图像文本“有一件事是肯定的…”移动到其原始位置上方? (例如,“切换”文本下方) 导入快捷界面 结构ContentView:View{ //@EnvironmentObject var showBack:Bool @状态变量showBack=false var body:一些观点{ VStack(){

请您帮助更新代码,以便仅在第一个动画终止后,将绿色图像文本“有一件事是肯定的…”移动到其原始位置上方? (例如,“切换”文本下方) 谢谢 奥利维尔

请您帮助更新代码,以便仅在第一个动画终止后,将绿色图像文本“有一件事是肯定的…”移动到其原始位置上方? (例如,“切换”文本下方)

导入快捷界面
结构ContentView:View{
//@EnvironmentObject var showBack:Bool
@状态变量showBack=false
var body:一些观点{
VStack(){
ContentViewTest()
垫片()
文本(字符串(self.showBack))
}
}
}
结构ContentViewTest:视图{
@状态变量showBack=false
let sample1=“如果你知道自己的性格令人不快,不喜欢别人,这对工作没有任何障碍。”
let sample2=“有一件事是肯定的——绵羊不是空气中的生物。”
var body:一些观点{
let front=CardFace(文本:样本1,背景:颜色.黄色)
let back=CardFace(文本:样本2,背景:Color.green)
让resetBackButton=按钮(操作:{self.showBack=true}){Text(“Back”)}。禁用(showBack==true)
让resetFrontButton=Button(操作:{self.showBack=false}{Text(“Front”)}。禁用(showBack==false)
让animatedToggle=按钮(动作:{
带动画(动画.线性(持续时间:0.8)){
self.showBack.toggle()
}
}){文本(“切换”)}
返回
VStack(){
HStack(){
重置前按钮
垫片()
动画跟踪
垫片()
重置BackButton
}.padding()
垫片()
垫片()
垫片()
垫片()
FlipView(正面:正面,背面:背面,展示:$showBack)
}
}
}
结构FlipView:视图{
var front:SomeTypeOfViewA
var back:SomeTypeOfViewB
@状态私有变量翻转=false
@绑定变量展示:Bool
var body:一些观点{
返回VStack{
垫片()
ZStack(){
正面。不透明度(翻转?0.0:1.0)
背面。不透明度(翻转?1.0:0.0)
}
.修改器(翻转效果(翻转:$flipped,角度:showBack?180:0,轴:(x:1,y:0)))
.ontapsigne{
带动画(动画.线性(持续时间:0.8)){
self.showBack.toggle()
}
}
垫片()
}
}
}
结构CardFace:视图{
变量文本:字符串
变量背景:SomeTypeOfView
var body:一些观点{
文本(文本)
.multilitextalignment(.center)
.填充(5).边框(宽:250,高:150).背景(背景)
}
}
结构FlipEffect:GeometryEffect{
var animatableData:Double{
获取{angle}
设置{angle=newValue}
}
@绑定变量翻转:Bool
可变角度:双
let轴:(x:CGFloat,y:CGFloat)
func effectValue(大小:CGSize)->ProjectionTransform{
DispatchQueue.main.async{
self.fliped=self.angle>=90&&self.angle<270
}
让tweakedAngle=翻转?-180+角度:角度
设a=CGFloat(角度(度:调整角度)。弧度)
var transform3d=CATTransformM3DidEntity;
transform3d.m34=-1/最大值(大小.宽度,大小.高度)
transform3d=CATTransformM3DROATE(transform3d,a,x轴,y轴,0)
transform3d=CATTransformM3DTranslate(transform3d,-尺寸.宽度/2.0,-尺寸.高度/2.0,0)
设affineTransform=ProjectionTransform(CGAffineTransform(translationX:size.width/2.0,y:size.height/2.0))
返回ProjectOnTransform(transform3d).连接(仿射Transform)
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
}
}

要更新的代码在哪里?代码已被删除added@Asperi,我已经添加了代码,你有时间帮忙吗?
        import SwiftUI
    
    
    
    struct ContentView : View {
    
        // @EnvironmentObject var showBack: Bool
       @State var showBack = false
        
        var body : some View {
            
            VStack() {
                ContentViewTest()
                Spacer()
                Text(String(self.showBack))
                }
           }
        }
        
    
    struct ContentViewTest : View {
    
          @State var showBack = false
    
          let sample1 = "If you know you have an unpleasant nature and dislike people, this is no obstacle to work."
          let sample2 = "One thing is for sure – a sheep is not a creature of the air."
    
          var body : some View {
    
                let front = CardFace(text: sample1, background: Color.yellow)
                let back = CardFace(text: sample2, background: Color.green)
                let resetBackButton = Button(action: { self.showBack = true }) { Text("Back")}.disabled(showBack == true)
            
                let resetFrontButton = Button(action: { self.showBack = false }) { Text("Front")}.disabled(showBack == false)
            
                let animatedToggle = Button(action: {
                      withAnimation(Animation.linear(duration: 0.8)) {
                            self.showBack.toggle()
                      }
                }) { Text("Toggle")}
    
    
                return
                      VStack() {
                            HStack() {
                                  resetFrontButton
                                  Spacer()
                                  animatedToggle
                                  Spacer()
                                  resetBackButton
                            }.padding()
                         Spacer()
                         Spacer()
                         Spacer()
                         Spacer()
                         FlipView(front: front, back: back, showBack: $showBack)
                }
          }
    }
    
    
    struct FlipView<SomeTypeOfViewA : View, SomeTypeOfViewB : View> : View {
    
          var front : SomeTypeOfViewA
          var back : SomeTypeOfViewB
    
          @State private var flipped = false
          @Binding var showBack : Bool
    
          var body: some View {
    
                return VStack {
                      Spacer()
    
                      ZStack() {
                            front.opacity(flipped ? 0.0 : 1.0)
                            back.opacity(flipped ? 1.0 : 0.0)
                      }
                      .modifier(FlipEffect(flipped: $flipped, angle: showBack ? 180 : 0, axis: (x: 1, y: 0)))
                      .onTapGesture {
                            withAnimation(Animation.linear(duration: 0.8)) {
                                  self.showBack.toggle()
                            }
                      }
                      Spacer()
                }
          }
    }
    
    struct CardFace<SomeTypeOfView : View> : View {
          var text : String
          var background: SomeTypeOfView
    
          var body: some View {
                Text(text)
                      .multilineTextAlignment(.center)
                      .padding(5).frame(width: 250, height: 150).background(background)
          }
    }
    
    struct FlipEffect: GeometryEffect {
    
          var animatableData: Double {
                get { angle }
                set { angle = newValue }
          }
    
          @Binding var flipped: Bool
          var angle: Double
          let axis: (x: CGFloat, y: CGFloat)
    
          func effectValue(size: CGSize) -> ProjectionTransform {
    
                DispatchQueue.main.async {
                      self.flipped = self.angle >= 90 && self.angle < 270
                }
    
                let tweakedAngle = flipped ? -180 + angle : angle
                let a = CGFloat(Angle(degrees: tweakedAngle).radians)
    
                var transform3d = CATransform3DIdentity;
                transform3d.m34 = -1/max(size.width, size.height)
    
                transform3d = CATransform3DRotate(transform3d, a, axis.x, axis.y, 0)
                transform3d = CATransform3DTranslate(transform3d, -size.width/2.0, -size.height/2.0, 0)
    
                let affineTransform = ProjectionTransform(CGAffineTransform(translationX: size.width/2.0, y: size.height / 2.0))
    
                return ProjectionTransform(transform3d).concatenating(affineTransform)
          }
    }
    
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }