SwiftUI (Playgrounds) - 将值从一个视图传递到另一个

问题描述

我正在学习 SwiftUI 并试图实现滚动内容时背景图像变得模糊的效果

我目前在 Mac 上使用 Playgrounds(这就是 ArtworkImage 公开的原因),其中有两个包含代码文件

我尝试按照此处的说明进行操作,但运气不佳 - ScrollView effects using GeometryReader

主要(电影视图)

import SwiftUI
import PlaygroundSupport

struct MovieView: View {
    
    var body: some View {
        ArtworkImage()
            .overlay(
                ScrollView { <- the amount scrolled will determine the blur effect
                    vstack(alignment: .leading,spacing: 40) {
                        Spacer()
                            .frame(height: 280)
                        MovieInfo()
                        CastRow()
                        MovieRow()
                        Spacer()
                    }
                }
            )
    }
}

PlaygroundPage.current.setLiveView(MovieView())

ArtworkImage.swift(在 MovieView Sources 中)

import SwiftUI

public struct ArtworkImage: View {
    public init(){}
    
    public var body: some View {
        let poster: Image = Image(uiImage: #imageLiteral(resourceName: "wandavision.jpg"))

        GeometryReader { geo in
            poster
                .resizable()
                .aspectRatio(contentMode: .fill)
                .frame(width: geo.size.width)
                .blur(radius: 80,opaque: true)
                .ignoresSafeArea()
        }
        .overlay(
            vstack {
                GeometryReader { geo in
                    poster
                        .resizable()
                        .aspectRatio(contentMode: .fill)
                        .frame(width: geo.size.width,height: 456,alignment: .top)
                        .mask(
                            Rectangle()
                                .fill(LinearGradient(gradient: Gradient(colors: [Color.clear,Color.black]),startPoint: .bottom,endPoint: .top))
                        )
                    .blur(radius: [based on the amount the user has scrolled the ScrollView in the MovieView view])
                }
                
                Spacer()
            }
        )
    }
}

我想要做的(不确定这是否是最好的方法),是存储用户滚动的单位数量(以像素为单位?),并将其传递给 {{1}查看,我可以在 ArtworkImage 修饰符的计算中使用它。

我希望这是有道理的。任何帮助表示赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)