ios - 使用 SwiftUI 创建视差
问题描述
我正在尝试使用 SwiftUI 创建视差效果。
这是我的实现:
import SwiftUI
struct ContentView: View {
@State var parralaxOffset: CGFloat = 0
var body: some View {
ZStack {
ScrollView {
Text("Background")
}.offset(x: 0, y: parralaxOffset)
ScrollView {
GeometryReader { reader in
Text("Foreground contentOffset: \(reader.frame(in: .global).minY)")
}
}
}
}
}
我的问题是:如何设置reader.frame(in: .global).minY)
变量parralaxOffset
?
解决方案
当前存在一个错误(或预期效果),您无法在GeometryReader
. 作为一种解决方法,您可以定义一个处理操作的函数,如下所示:
import SwiftUI
struct ContentView: View {
@State var parralaxOffset: CGFloat = 0
func handleParralax(_ reader: GeometryProxy) -> some View {
self.parralaxOffset = reader.frame(in: .global).minY
return Text("Foreground contentOffset: \(reader.frame(in: .global).minY)")
}
var body: some View {
ZStack {
ScrollView {
Text("Background")
}.offset(x: 0, y: parralaxOffset)
ScrollView {
GeometryReader { reader in
self.handleParralax(reader)
}
}
}
}
}
推荐阅读
- sql - 选择递归查询
- git - 将我需要的文件从 DEV 分支合并到 Azure VSTS 中的 QA
- r - 使用 lme4 为线性模型拟合随机因子
- javascript - “组件”未定义为 no-undef。使用 JSX react/react-in-jsx-scope 时,'React' 必须在范围内
- javascript - Jquery $.post html 到外部 php 并将 html 打印为 pdf。需要找到最优解
- python - 在 WRDS CRSP 查询中使用来自外部文件的 Python dict 值
- java - log4j2 自定义 jdbcapender 没有为一个变量捕获两个不同的值?
- javascript - MUI 更改 Select 的 Label 的 css 和选定选项的颜色
- javascript - 段落中的嵌套跨度不会包裹在子节点上,只会包裹在父节点上
- azure - 在哪里获取 Azure 存储授权:SharedKey?