ScrollView的SwiftUI动画

ScrollView的SwiftUI动画,swiftui,Swiftui,我有两个视图(vstack),一个在ZStack中,一个在另一个之上 第二个视图后面的第一个VStack用作菜单。位于顶部的第二个视图是主应用程序视图 当我点击一个按钮时,我正在缩小主视图的比例,并将其移动到屏幕的右侧以显示菜单 我在主视图中有一个滚动视图,每次我缩小或放大主视图时,动画都不能顺利工作,页面会闪烁,看起来很难看。如果我删除ScrollView,它就可以正常工作 我试图用列表替换ScrollView,但没有解决问题,闪烁仍然不变 有没有办法解决这个问题 下面是一个示例代码 stru

我有两个视图(vstack),一个在ZStack中,一个在另一个之上

第二个视图后面的第一个VStack用作菜单。位于顶部的第二个视图是主应用程序视图

当我点击一个按钮时,我正在缩小主视图的比例,并将其移动到屏幕的右侧以显示菜单

我在主视图中有一个滚动视图,每次我缩小或放大主视图时,动画都不能顺利工作,页面会闪烁,看起来很难看。如果我删除ScrollView,它就可以正常工作

我试图用列表替换ScrollView,但没有解决问题,闪烁仍然不变

有没有办法解决这个问题

下面是一个示例代码

struct ContentView: View {
 var body: some View {

ZStack {

 Menu()

VStack {

  ScrollView(.vertical, showsIndicators: false) {

  VStack(spacing:0) {

     Header()

     MainAppView()

     }

  }

TabBar()

}

.scaleEffect(self.openMenu ? 0.5 : 1, anchor: UnitPoint(x: 1.5, y: 0.5))

.animation(.easeInOut(duration: 0.2))

}

}

}

您可以尝试的是,制作闪烁视图的屏幕截图,然后使用您刚刚添加到真实视图上的屏幕截图制作动画。动画结束后,只需删除屏幕截图。当然,您必须以编程方式制作屏幕截图。

由于缺少代码,我无法重复所有行为。我认为您有这个问题,因为您正在缩小
ScrollView
,它会重新计算所有内容。尝试对其进行一些偏移,而不是缩放,并且不应出现闪烁:

//替换此
.scaleEffect(self.openMenu?0.5:1,锚点:单位点(x:1.5,y:0.5))
//为此:
.偏移量(x:self.openMenu?300:0)

谢谢你的回答,但当用户单击并切换到另一个页面时,我会遇到问题,然后新页面返回全屏时会闪烁,因为它不是屏幕截图。谢谢你的回答,不过我注意到了一些问题,如果我在不使用锚定值的情况下向下缩放,则不会出现闪烁,效果良好且平滑,但视图不会在右侧缩放,它将在左上角缩放,菜单将保持覆盖状态。但只要我改变y值,闪烁就会出现。@Philippe,试着像我的回答那样缩放和偏移,但也要使用y位置。您的视图应该缩小并平滑地转到新位置