swift 动画HStack转换为VStack

wyyhbhjk  于 2023-02-21  发布在  Swift
关注(0)|答案(1)|浏览(122)

我有一个HStack,由如下子视图组成:

在这里,左右子视图是“第二天”子视图的灰色副本,但它们被设计为从屏幕上切除。我希望用户能够通过拖放“重新排序”这些子视图,但由于只有一个子视图是完全可见的,我希望动画显示这些子视图,使其在开始拖动手势时“垂直”排列。例如,如果用户开始拖动“第二天”子视图,我希望HStack中的所有子视图都能重新组织和动画化,使它们垂直对齐,如下所示:

我通过以下方法获得了相同的“结果”:

@State isDragging = false 

if isDragging {
   VStack {
      // subviews here
   }
} else {
   HStack {
      //subviews here
   }
}

...

.onDrag(...) // set isDragging to true here with withAnimation

然而,由于我使用if/else的特性,我没有完成我所寻找的“涓滴”动画,或者任何动画。有人能给予我一些想法,我如何重组它来完成这种类型的动画吗?

2mbi3lxu

2mbi3lxu1#

我遇到了完全相同的问题,在搜索了很长时间后,我发现您可以将AnyLayout()VStackLayout()HStackLayout()结合使用:

let layout = isDragging ? AnyLayout(VStackLayout()) : AnyLayout(HStackLayout())
        
layout { 
    // subviews here
}

使用AnyLayout(),子视图不会被破坏,所以如果你用withAnimation()来修改isDragging变量,一切都会正常。

相关问题