Взаимодействие SwiftUI и Texture / AsyncDisplayKit
Мы можем инициализировать узел и предоставить представление SwiftUI, которое будет использоваться в качестве вспомогательного представления. Текстовое представление вкладывается в подкласс UIHostingController
, UIViewController
, который представляет представление SwiftUI в контекстах UIKit.
Представление предоставляется через блок, который будет возвращать представление, так что фактическая конструкция представлениямогут быть сохранены до позже. Шаг отображения узла происходит синхронно, потому что узел может отображаться асинхронно только тогда, когда он переносит _ASDisplayView
(подкласс внутреннего представления), а не когда он переносит 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")
)
}
}
Ссылки: