大佬教程收集整理的这篇文章主要介绍了我怎么知道一个滚动视图元素即将离开/进入屏幕,所以我可以创建一个动画,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含很多项目的垂直滚动视图。当用户滚动时,我想做一些不错的效果,例如,像旋转木马之类的东西。事实上,没有那么戏剧化,只是单元格被移到了右边,因为它们被滚动到视野之外。
这是我必须测试的。
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")
我添加了此 coordinateSpace
和此 .onChange
,以查看特定元素(元素编号 1)发生的情况。
如果我向上滚动,我看到排名第一的 value.minY
从 0 变为 -400。当 Y 为 0 时,表示该元素完全显示。
但是如果我在那个视图上有 N 个元素,那么知道每个元素何时进入视图将是非常复杂的。至少我不知道如何。
这个想法是在元素开始离开视图时应用移动、旋转等效果,并在元素完全显示时展开效果。
怎么样?
如果我误读了您的问题,我深表歉意,但是您只是试图根据对象在坐标空间中的位置在屏幕上显示或关闭时为其设置动画?如果是这样,这里有一个如何做的例子。它基本上就是你所拥有的,除了你可以在修改器上立即使用几何体并且不需要 .onChange。
下面的代码有一个上下阈值,计算每个项目的百分比到阈值,然后相应地更新修饰符。
import SwiftUI
struct ScrollAnimationView: View {
var body: some View {
ScrollView {
ForEach(0..<50) { item in
GeometryReader { geometry in
Text("numbER \(item),PERCENT: \(getPercentOfAnimation(geo: geometry))")
.font(.headlinE)
.offset(x: getPercentOfAnimation(geo: geometry) * UIScreen.main.bounds.width)
.opacity(1.0 - Double(getPercentOfAnimation(geo: geometry)))
.rotationEffect(
Angle(degrees: 10 * Double(getPercentOfAnimation(geo: geometry)))
)
.scaleEffect(1.0 - getPercentOfAnimation(geo: geometry))
}
}
}
.coordinateSpace(name: "xxx")
}
func getPercentOfAnimation(geo: GeometryProxy) -> CGFloat {
let threshold: CGFloat = UIScreen.main.bounds.height * 0.4
let currentY: CGFloat = geo.frame(in: .named("xxx")).minY
if currentY < threshold {
return 1 - currentY / threshold
}
let topThreshold: CGFloat = UIScreen.main.bounds.height * 0.6
if currentY > topThreshold {
return (currentY - topThreshold) / threshold
}
return 0
}
}
以上是大佬教程为你收集整理的我怎么知道一个滚动视图元素即将离开/进入屏幕,所以我可以创建一个动画全部内容,希望文章能够帮你解决我怎么知道一个滚动视图元素即将离开/进入屏幕,所以我可以创建一个动画所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。