Swiftui 如何知道scrollview元素即将离开/进入屏幕,以便创建动画

Swiftui 如何知道scrollview元素即将离开/进入屏幕,以便创建动画,swiftui,Swiftui,我有一个包含很多项目的垂直滚动视图。当用户滚动时,我想做一些很好的效果,比如旋转木马之类的。事实上,不太引人注目的是,当滚动离开视图时,单元格被向右移动 这就是我要测试的 ScrollView { ForEach(0...50) { item in GeometryReader { geometry in Text(item) .onChange(of: geometry.frame(in: .named("xxx")), perform

我有一个包含很多项目的垂直滚动视图。当用户滚动时,我想做一些很好的效果,比如旋转木马之类的。事实上,不太引人注目的是,当滚动离开视图时,单元格被向右移动

这就是我要测试的

ScrollView {
  ForEach(0...50) { item in
    GeometryReader { geometry in
      Text(item)
       .onChange(of: geometry.frame(in: .named("xxx")), perform: { value in
          if item == 1 {
            print(value.minY)}
          })
    }
   }
  }
  .coordinateSpace(name: "xxx")
我已经添加了这个坐标空间和这个.onChange,以查看一个元素的具体情况,元素编号1

我看到了数字1的值。如果我向上滚动,minY从0变为-400。Y为0时,表示此元素完全处于视图中

但是,如果该视图上有N个元素,那么知道每个元素何时进入视图将非常复杂。至少我不知道该怎么做

这样做的目的是在元素开始离开视图时应用一种效果,例如平移、旋转或其他任何效果,并在元素在视图中已满时释放该效果


怎么做?

如果我误读了你的问题,我很抱歉,但是你只是试图根据对象在坐标空间中的位置,在屏幕上或屏幕下设置对象的动画?如果是这样的话,下面是一个如何做到这一点的例子。它基本上就是你所拥有的,只是你可以在修改器上立即使用几何体,而不需要.onChange

下面的代码有一个顶部和底部阈值,计算每个项目在阈值中的百分比,然后相应地更新修改器

导入快捷键 结构滚动动画视图:视图{ var body:一些观点{ 滚动视图{ ForEach0..CGFloat{ let threshold:CGFloat=UIScreen.main.bounds.height*0.4 让currentY:CGFloat=geo.framein:.namedxxx.minY 如果电流Y<阈值{ 返回1-当前Y/阈值 } 让topThreshold:CGFloat=UIScreen.main.bounds.height*0.6 如果当前Y>topThreshold{ 返回电流Y-最高阈值/阈值 } 返回0 } }
这能回答你的问题吗?简直太棒了。现在我知道它是怎么工作的了…谢谢。