首页 > 解决方案 > 使用 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

标签: iosswiftswiftui

解决方案


当前存在一个错误(或预期效果),您无法在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)
                }
            }
        }
    }
}

推荐阅读