簡體   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