今天我试图找出一种连接 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/