微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。