首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从GeometryReader中进行更改时,SwiftUI不会反映对@Binding @State变量所做的更改

在SwiftUI中,GeometryReader是一个用于获取父视图的几何信息的容器视图。当我们在GeometryReader中对@Binding或@State变量进行更改时,SwiftUI不会自动更新视图。

要使SwiftUI能够反映对@Binding或@State变量所做的更改,我们可以使用以下方法之一:

  1. 使用ObservableObject和@Published属性:创建一个ObservableObject类,并在其中使用@Published属性来包装需要观察的变量。然后,在视图中使用@ObservedObject修饰符将ObservableObject实例与视图关联起来。当@Published属性的值发生更改时,SwiftUI会自动更新视图。
  2. 使用onChange修饰符:在视图中使用onChange修饰符,并在其中检测@Binding或@State变量的更改。在onChange闭包中,我们可以手动更新视图或执行其他操作。

下面是一个示例代码,演示了如何使用ObservableObject和@Published属性来实现对GeometryReader中@Binding或@State变量更改的反映:

代码语言:txt
复制
import SwiftUI

class ViewModel: ObservableObject {
    @Published var value: CGFloat = 0.0
}

struct ContentView: View {
    @ObservedObject var viewModel = ViewModel()

    var body: some View {
        VStack {
            GeometryReader { geometry in
                Rectangle()
                    .frame(width: geometry.size.width * self.viewModel.value, height: 100)
                    .foregroundColor(.blue)
            }
            .frame(height: 100)
            
            Slider(value: $viewModel.value, in: 0...1)
                .padding()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在上面的示例中,我们创建了一个名为ViewModel的ObservableObject类,并在其中使用@Published属性包装了value变量。在ContentView中,我们使用@ObservedObject修饰符将ViewModel实例与视图关联起来。当Slider的值发生更改时,GeometryReader中的Rectangle的宽度将自动更新。

这是一个简单的示例,展示了如何在SwiftUI中实现对GeometryReader中@Binding或@State变量更改的反映。根据具体的应用场景和需求,我们可以使用其他方法来实现相似的效果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维服务:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网服务:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

@State 研究

我在去年底使用了SwiftUI写了第一个 iOS app 健康笔记,这是我第一次接触响应式编程概念。在有了些基本的认识和尝试后,深深的被这种编程的思路所打动。不过,我在使用中也发现了一些奇怪的问题。我发现在视图(View)数量达到一定程度,随着数据量的增加,整个app的响应有些开始迟钝,变得有粘滞感、不跟手。app响应出现了问题一方面肯定和我的代码效率、数据结构设计欠佳有关;不过随着继续分析,发现其中也有很大部分原因来自于SwiftUI中所使用的响应式的实现方式。不恰当的使用,可能导致响应速度会随着数据量及View量的增加而大幅下降。通过一段时间的研究和分析,我打算用两篇文章来阐述这方面的问题,并尝试提供一个现阶段的使用思路。

02

从用SwiftUI搭建项目说起

后续这个SwiftUI分类的文章全部都是针对SwiftUI的日常学习和理解写的,自己利用Swift写的第二个项目也顺利上线后续的需求也不是特着急,最近正好有空就利用这段时间补一下自己对SwiftUI的理解,这个过程当中正好把整个学习过程记录下来,方便自己查阅,也希望能给需要的同学一点点的帮助。由于自己还欠着RxSwift的帐,这次也是想着先放弃别的账务(欠的的确挺多的)先全心全意的把这两块的帐给补补,希望补上这笔账之后自己对Swift的理解也能上一个台阶,对Siwft的理解自认为还是感觉欠缺的,不算是真的深入的掌握,我对SwiftUI也是在学习当中,现在能查阅的关于SwiftUI的资料很多是需要收费的,遇到问题只能想办法努力解决,有写的不钟意的地方,希望多加指正!

02
领券