SwiftUI:在 Single 和 HStack 视图之间制作动画

Posted

技术标签:

【中文标题】SwiftUI:在 Single 和 HStack 视图之间制作动画【英文标题】:SwiftUI: animating between Single and HStack views 【发布时间】:2019-11-26 16:06:54 【问题描述】:

目标:

1- 显示覆盖整个屏幕的视图(蓝色) 2-当点击底部(右上角)时,它会显示一个 HStack 动画右侧 HStack(绿色)“幻灯片偏移动画”。

import SwiftUI

struct ContentView: View 

    @State var showgreen = false


    var body: some View 


    NavigationView 

        HStack 
            Rectangle()
            .foregroundColor(.blue)

            if showgreen  
            Rectangle()
            .foregroundColor(.green)
            .offset(x: showgreen ? 0 : UIScreen.main.bounds.width)
            .animation(.easeInOut)
            

           

    .navigationBarItems(trailing:
      Button(action:  self.showgreen.toggle() ) 
              Image(systemName: "ellipsis")
              )
       

    .navigationViewStyle(StackNavigationViewStyle())


    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
        .colorScheme(.dark)
        .previewDevice("iPad Pro (12.9-inch) (3rd generation)")
    

代码有效,但我无法让绿色“幻灯片偏移动画”工作。非常感谢任何帮助! :)

【问题讨论】:

【参考方案1】:

而不是使用if 条件,您需要绿色矩形已经存在,并且在屏幕外。当showgreen 切换时,您需要缩小蓝色矩形的大小,这将为绿色矩形腾出空间。

struct ContentView: View 
    @State var showgreen = false

    var body: some View 
        NavigationView 
            HStack 
                Rectangle()
                    .foregroundColor(.blue)
                    .frame(width: showgreen ? UIScreen.main.bounds.width / 2 : UIScreen.main.bounds.width)
                    .animation(.easeInOut)

                Rectangle()
                    .foregroundColor(.green)
                    .animation(.easeInOut)
            
            .navigationBarItems(trailing:
                Button(action:  self.showgreen.toggle() ) 
                    Image(systemName: "ellipsis")
            )
        
        .navigationViewStyle(StackNavigationViewStyle())
    

【讨论】:

以上是关于SwiftUI:在 Single 和 HStack 视图之间制作动画的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI之HStack和VStack的切换

SwiftUI之HStack和VStack的切换

如何在 SwiftUI 中嵌入 ForEach 的 HStack 中设置相对宽度?

SwiftUI如何制作圆角和屏幕底部上方的hstack?

HStack 中的 SwiftUI 元素具有不同的高度

SwiftUI iOS 14 |在 HStack 中自动展开文本框和内容