ar_tourism_flutter_unity/ios/Runner/UnityViewFactory.swift
2025-05-14 18:24:12 +08:00

71 lines
2.3 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Flutter
import UIKit
import UnityLibrary
/// Unity
class UnityViewController: UIViewController {
// Unity
weak var unityFramework: UnityFramework?
init(unityFramework: UnityFramework?) {
self.unityFramework = unityFramework
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
// Unity
if let unityView = unityFramework?.appController()?.rootView {
view.addSubview(unityView)
unityView.frame = view.bounds
unityView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
}
}
/// UnityFlutter
class UnityViewFactory: NSObject, FlutterPlatformViewFactory {
//
private var registrar: FlutterPluginRegistrar
// Unity
private weak var unityFramework: UnityFramework?
init(registrar: FlutterPluginRegistrar, unityFramework: UnityFramework?) {
self.registrar = registrar
self.unityFramework = unityFramework
super.init()
}
// Flutter
func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?) -> FlutterPlatformView {
return UnityFlutterPlatformView(frame: frame, viewId: viewId, arguments: args, registrar: registrar, unityFramework: unityFramework)
}
// StandardMessageCodec
func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
return FlutterStandardMessageCodec.sharedInstance()
}
}
/// Unity Flutter
class UnityFlutterPlatformView: NSObject, FlutterPlatformView {
// Unity
private var unityViewController: UnityViewController
init(frame: CGRect, viewId: Int64, arguments args: Any?, registrar: FlutterPluginRegistrar, unityFramework: UnityFramework?) {
unityViewController = UnityViewController(unityFramework: unityFramework)
unityViewController.view.frame = frame
super.init()
}
//
func view() -> UIView {
return unityViewController.view
}
}