ios - 如何将 SwiftUI View 包装在 ASDisplayNode 中

标签 ios swift swiftui asyncdisplaykit

今天我试图找出一种连接 SwiftUI 和纹理 (AsyncDisplayKit) 的方法。

通过这种方式,我可以在详细 View 中获得 AsyncDisplayKit、ASNetworkImage 等的速度和优势,以及 SwiftUI 和合并的灵 active 。

最佳答案

SwiftUI 和纹理/AsyncDisplayKit 接口(interface)

我们可以初始化一个节点并提供一个 SwiftUI View 作为后备 View 。 Text View 嵌套在 UIHostingController 中,它是一个 UIViewController 子类,表示 UIKit 上下文中的 SwiftUI View 。

该 View 是通过一个 block 提供的,该 block 将返回一个 View ,以便可以保存 View 的实际构造以供稍后使用。节点显示步骤同步发生,因为节点只能在包装 _ASDisplayView(内部 View 子类)时异步显示,而在包装 UIView 时则不能。

//
//  HostingNode.swift
//

import AsyncDisplayKit
import SwiftUI

class HostingNode: ASDisplayNode {

    var viewController: UIViewController?

    override init() {
        super.init()

        setViewBlock { [weak self]() -> UIView in
            self?.viewController = self?.makeHostingController()
            return self?.viewController?.view ?? UIView()
        }
    }

    private func makeHostingController() -> UIViewController {
        UIHostingController(
            rootView: Text("Attention")
        )
    }
}

引用文献:

关于ios - 如何将 SwiftUI View 包装在 ASDisplayNode 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58478492/

相关文章:

ios - 如何处理 Xcode Storyboard中的 Misplaced View 警告?

ios - 如何在计算属性上设置值

ios - 我如何让用户输入密码以注销。解析/swift

ios - 如何在 SwiftUI 中同时移动文本并更改其值?

SwiftUI Preview - 无法构建方案,没有这样的模块 "ProjectName"

ios - Photos Framework 创建的相册中图像的 iCloud 同步

ios - 在不规则形状图像上添加相机图层 IOS

ios - swift 3 : Handle Errors in URLSession Delegates

arrays - 从 Swift 中的函数返回一个数组

swift - 如何访问 SwiftUI 中的 subview ?