Как обернуть SwiftUI View внутри ASDisplayNode - PullRequest
0 голосов
/ 21 октября 2019

Сегодня я пытался найти способ сопряжения SwiftUI и Texture (AsyncDisplayKit).

Таким образом, я получаю скорость и преимущества AsyncDisplayKit, ASNetworkImage и т. Д., А также гибкость SwiftUI и Combine inмои подробные просмотры.

1 Ответ

0 голосов
/ 21 октября 2019

Взаимодействие 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")
        )
    }
}

Ссылки:

...