是什么原因导致 updateUIView() 在这段代码中被调用?

2024-03-08

我知道 @State 变量的更改通知 @Binding 状态已更改,但是什么导致 updateUIView() 方法被调用? @Binding 和调用之间显然存在一些隐藏的联系,但它是如何工作的呢?

//  Experiment_Map_View.swift

import SwiftUI
import MapKit

struct Experiment_Map_View: UIViewRepresentable {
    @Binding var test: Bool

    func updateUIView(_ uiView: MKMapView, context: Context) {
        print("updateUIView")
        print(test)
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    final class Coordinator: NSObject, MKMapViewDelegate {
        var control: Experiment_Map_View

        init(_ control: Experiment_Map_View) {
            print("init -----------------")
            self.control = control
        }

    }

    func makeUIView(context: Context) -> MKMapView {
         print("makeUIView")
        let map = MKMapView()
        map.delegate = context.coordinator
        return map
    }
}

struct MyRootView: View {
    @State var test: Bool = true

    var body: some View {
        ZStack {
            Experiment_Map_View(test: $test)
            VStack {
                Spacer()
                Button("Next") {
                    print("Next")
                    self.test.toggle()
                }
            }
        }
    }

}

struct Experiment_Map_View_Previews: PreviewProvider {
    static var previews: some View {
        MyRootView()
    }
}

SwiftUI正在管理内存@State and @Binding对象并自动刷新任何 UIView依赖于你的变量。SwiftUI是闭源的,所以不幸的是我们还不知道这是如何完成的,但为了简单起见,它可以被认为是幕后的didSet修饰符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是什么原因导致 updateUIView() 在这段代码中被调用? 的相关文章

  • 在完全自动反转重复周期之间延迟 SwiftUI 中的重复动画

    我正在 SwiftUI 中构建一个 Apple Watch 应用 它可以读取用户的心率并将其显示在心形符号旁边 我有一个动画可以让心形符号反复跳动 由于我知道实际用户的心率 因此我希望使其以与用户心率相同的速率跳动 并在每次速率变化时更新动
  • SwiftUI |选择器 - 更改选定行的颜色

    我想更改所选行的颜色 正如您所看到的 默认情况下它具有浅灰色 我不知道该怎么做 因为我根本找不到访问这一行的方法 有什么办法可以做到这一点吗 演示代码 struct ContentView View var data Array 0 20
  • SceneDelegate 和 AppDelegate 之间的区别

    在我的 SwiftUI 项目中我看到AppDelegate文件以及SceneDelegate file 它们之间有什么区别 例如在方法之间SceneDelegate scene willConnectTo options 并在AppDele
  • SwiftUI - 将数据传递到不同的视图

    我正在开发一个有 4 个不同视图的应用程序 主视图 内容视图 an AddView an EditView 以及一个分离的DataView在一个类中 我通过一个传递所有数据可观察对象到其他意见 在主视图中我有一个项目列表 在里面AddVie
  • SwiftUI如何用TabView隐藏导航栏

    我正在使用 SwiftUITabView inside NavigationView 但我就是无法在iOS 13 0模拟器中隐藏导航栏 这是代码 import SwiftUI struct TestView View var body so
  • 我如何确定视图在 SwiftUI 中的最后一行代码之前完全渲染?

    我有一些代码 它们必须在视图完全渲染和绘制后被触发 因为我们知道视图的 onAppear 或 onChange 它们对于了解视图是否已出现或正在更改很有用 但它们是确保视图已 100 渲染没有用 例如 如果我们在视图中获得 ForEach
  • SwiftUI withAnimation 完成回调

    我有一个基于某种状态的 swiftUI 动画 withAnimation linear duration 0 1 self someState newState 上述动画完成时是否会触发任何回调 如果有关于如何在 SwiftUI 中使用完成
  • 如何在 SwiftUI 中导航到另一个视图时消除动画故障

    当导航到 SwiftUI 中包含列表的视图时 模拟器和真实设备上都会出现动画故障 就在导航动画结束时 列表项似乎 跳 了几个像素到其指定位置 请参阅以下简单示例 内容视图 struct ContentView View var body s
  • SwiftUI • 如何实现半屏ShareSheet?

    我在我的项目中实现了一个 ShareSheetSwiftUI App using UIViewControllerRepresentable Code struct ShareView UIViewControllerRepresentab
  • 如何在 SwiftUI 中管理 AVPlayer 状态

    我有 SwiftUI 中的 URL 列表 当我点击某个项目时 我会呈现一个全屏视频播放器 我有一个 EnvironmentObject它处理一些查看器选项 例如 是否显示时间码 我还有一个显示和隐藏时间码的切换开关 我只在本例中包含了该切换
  • 在 SwiftUI TextEditor 中设置光标位置

    有没有办法以编程方式将光标移动到特定文本行或在 SwifUI 中选择它TextEditor 例如 如果有一个TextEditor里面写着10行 当用户按下按钮时 光标将导航到第三行 或者文本将被选择 目前使用默认的 SwiftUI 是不可能
  • 在 Swift 2.0 中隐藏 Home 指示器

    我希望隐藏 Home Indicator 虽然这在 Swift 中很简单 但在 SwiftUI 中似乎并不那么容易 我尝试使用这个 如何使用 SwiftUI 隐藏 home 指示器 https stackoverflow com quest
  • SwiftUI ScrollView 只向一个方向滚动

    尝试使用视图作为列表行样式来创建自定义列表 以摆脱默认情况下列表中难看的分隔线 但是 一旦我将 ZStack 行放入滚动视图中 滚动视图就会在两个方向上滚动 而不仅仅是垂直滚动 这是内容视图 NavigationView ScrollVie
  • SwiftUI 未知属性“可观察对象”

    所以我收到错误未知属性ObservableObject旁边的 ObservableObject var dataSource DataSource 下面打电话 这ObservableObject几天前在另一个项目中工作得很好 但现在不行了
  • SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中

    我有这个简单的观点 import SwiftUI struct ContentView View var body some View Text Hello struct ContentView Previews PreviewProvid
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • SwiftUI:动态“列表”中的“切换”在重用时会破坏其布局?

    我试图展现一种动态List行包含Toggle元素 这Toggle最初布局正确 但是当它们滚动进和滚出视图时 即单元格重用时 它们的布局会中断 最小示例代码 import SwiftUI struct SwitchList View var
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 具有多个 ViewBuilder 的 SwiftUI 视图

    我有一个视图 表示单元格中的一行 如下所示 这很有效 但三个水平元素 图像 标题 副标题 图像 被硬编码为其各自的类型 我想要一个通用的ThreeItemView这可能需要 3Views任何类型并如图所示排列它们 这将允许我将相同的容器布局
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on

随机推荐