SwiftUI:如何知道何时在滚动视图中移动视图?
SwiftUI: How to know when view is moved inside scroll view?
我需要一些指导来解决问题。我在滚动视图中有多个视频,我只想一次播放其中一个。我知道 geo.frame 知道视图在屏幕中的位置,但我如何不断检查屏幕是否移动到一个点?我想在视频播放器视图中使用这段代码,但我只能将它放在 .onAppear 中,它不会工作,因为它只被调用一次。有没有一种方法可以检查何时移动屏幕(拖动滚动视图),以便我可以在中间播放视频并停止其他视频?
if (geo.frame(in: .global).midY > 200 && geo.frame(in: .global).midY < 800) {
avPlayer.play()
print("Global center: \(geo.frame(in: .global).midX) x \(geo.frame(in: .global).midY)")
print("Video to play: \(postID)")
}
您可以使用 Geometry reader 将此代码放入视图主体中。 geo 的值随着项目的滚动和移动而更新。
将此放在您的 table 个视频中的一行视图中:
struct Example: View {
private func checkLocation(geo: GeometryProxy) -> Bool {
let loc = geo.frame(in: .global).midY
print ("Loc is: \(loc)")
if loc > 200 {
return true
}
return false
}
var body: some View {
GeometryReader { geo in
if checkLocation(geo: geo) {
Text ("This is working")
}
}
}
}
我需要一些指导来解决问题。我在滚动视图中有多个视频,我只想一次播放其中一个。我知道 geo.frame 知道视图在屏幕中的位置,但我如何不断检查屏幕是否移动到一个点?我想在视频播放器视图中使用这段代码,但我只能将它放在 .onAppear 中,它不会工作,因为它只被调用一次。有没有一种方法可以检查何时移动屏幕(拖动滚动视图),以便我可以在中间播放视频并停止其他视频?
if (geo.frame(in: .global).midY > 200 && geo.frame(in: .global).midY < 800) {
avPlayer.play()
print("Global center: \(geo.frame(in: .global).midX) x \(geo.frame(in: .global).midY)")
print("Video to play: \(postID)")
}
您可以使用 Geometry reader 将此代码放入视图主体中。 geo 的值随着项目的滚动和移动而更新。 将此放在您的 table 个视频中的一行视图中:
struct Example: View {
private func checkLocation(geo: GeometryProxy) -> Bool {
let loc = geo.frame(in: .global).midY
print ("Loc is: \(loc)")
if loc > 200 {
return true
}
return false
}
var body: some View {
GeometryReader { geo in
if checkLocation(geo: geo) {
Text ("This is working")
}
}
}
}