繁体   English   中英

使用现有的 ios 框架进行统一。 如何找到viewController的替换

[英]using existing ios framework for unity. how to find replacement of viewController

我正在为现有的 ios 框架编写 ios 插件。

在框架中,已经有一个方法,如:

public func present(from parentController: UIViewController, key: String, completionHandler handler: @escaping (Bool, String) -> Void) {
}

我有点了解如何与统一 <-> swift 框架进行通信。 但我面临着这样的挑战,

我有一个基本的用户界面,canvas 和按钮。 我希望当用户点击按钮时,它应该调用上面的框架方法。 我知道点击按钮时如何调用统一方法。

但是我如何从统一调用上述方法,通过按钮点击,因为统一不知道 UIViewController。

请注意:ios 端是框架,而不是应用程序,因此框架不知道任何 UIKit 的东西。

我认为您遇到的问题是,当您可能想考虑封装时,您正在尝试在 Unity 中编写 1:1 Swift 操作。

在您的 Swift 代码中拥有一个代表您的 Unity 代码执行操作的代理/中间人组件可能更容易。 通过这种方式,大部分复杂性和特定于 iOS 的方面都隐藏(封装)在 Unity 代码之外。 毕竟,您的所有 Unity 代码可能关心的是显示某个 window ,它并不关心它是如何完成的。

因此,您可能会向 Unity 公开一个非常简单的合约,例如(伪代码):

ShowWindow (string name, callback allDone);

...然后在您的 Unity 代码中:

PluginManager pluginManager; // a set of predefined [DllImport]s

void OnZapRobotClicked()
{
   pluginManager.ShowWindow ("ZapRobot", () => { Debug.Log("Done"); } );
}

在 Swift 代码中调用ShowWindow时,您可以使用相应的 Swift API 来显示带有相应 controller 的相应视图。 如何做到这一点与在最好的情况下在 Swift 中显示 windows 没有什么不同。

现在不必编写无数[DllImport]的 Unity 端来显示单个 window,您只需为每个要公开的功能提供一个方法ShowWindow是第一个。 您可能有其他方法,例如SendMessageLoadSettingsSaveSettingsDisablePlugin

根据您设计插件系统的方式,您可能需要考虑将此主代理插件作为路由器,将命令从您的 C# 代码定向到适当的插件 Swift 端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM