gpt4 book ai didi

iphone - vuforia 和 uinavigationcontroller

转载 作者:行者123 更新时间:2023-11-29 13:24:09 27 4
gpt4 key购买 nike

我有一个由 Unity3D 生成的 xCode 项目(其中包括一个动画),我已经集成了用于显示动画(增强现实)的 vuforia SDK

我现在遇到的问题是在我的应用程序的相机屏幕和仪表板之间添加导航。

int OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight, int* openglesVersion) 方法中,我实用地添加了后退按钮,例如:

if (wrapperObj == nil)
{
wrapperObj = [[WrapperClass alloc] init];
}

[backButton addTarget:wrapperObj action:@selector(goToDashBoard:) forControlEvents:UIControlEventTouchUpInside];

将其传递给包装类

@interface WrapperClass : NSObject

@property (nonatomic, retain) UINavigationController *navigation;

-(void)goToDashBoard:(UIButton*)sender;

@end

void goToPreviousScreen()
{

}

@implementation WrapperClass
@synthesize navigation;

-(void) goToDashBoard:(UIButton*)sender
{
[[self navigation] popViewControllerAnimated:YES];
goToPreviousScreen();
}

@end

谁能告诉我如何启动和运行导航的解决方案?

更新

尝试以这种方式弹出 View 时:

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.navigationController popToRootViewControllerAnimated:YES];

我得到这个日志:

2012-12-05 16:20:45.502 arapp[5993:907] <HomeViewController: 0x246db00>

StopQCAR

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not deactivate dataset.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not destroy dataset.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not deinitialize the tracker.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not deinitialize the tracker.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

ghashtable.c:294: assertion 'hash != NULL' failed

最佳答案

如果我正确理解你的问题,你正试图通过向它添加文件、 View Controller 、代码等来修改 Unity 构建的 Xcode 项目。根据我的经验,这不是一个好主意,您最好尽可能在 Unity 中构建您的应用程序。 Vuforia 论坛的版主也强烈反对它。我以这种方式构建了一个 Unity/Vuforia 应用程序,主要是为了避免花时间学习如何使用 C# 在 Unity 中执行此操作。我最终遇到了无法追踪的内存泄漏,不得不硬着头皮回到 Unity 并学习 Unity 脚本。当然有很多 iOS 的事情你不能在 Unity 中做,我不知道你的应用程序是做什么的,但是有很多插件可以帮助你,我结束了学习如何编写自己的插件来获得一些 iOS 功能我需要。

但是,如果你想像我那样在 AR View 和其他 View Controller 之间导航,那就是制作另一个 viewController,它基本上是一个覆盖层,只包含用于导航的按钮。然后我初始化它并将它作为 subview 添加到 UnityViewController。然后添加代码以转到所需的任何 View ,例如仪表板。

// Init Vuforia VC, then add its view as subview  to "view" AR view, line 524
VuforiaViewController *vuforia = [[VuforiaViewController alloc] init];

// Create a full-screen window
_window = [[UIWindow alloc] initWithFrame:rect];
EAGLView* view = [[EAGLView alloc] initWithFrame:rect];
UnityViewController *controller = [[UnityViewController alloc] init];

sGLViewController = controller;
sGLView = view;



controller.view = view;

_splashView = [ [UIImageView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
_splashView.image = [UIImage imageNamed:SplashViewImage(UIInterfaceOrientationPortrait)];
}
else
{
_splashView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
_splashView.autoresizesSubviews = YES;
}




[view addSubview:_splashView];
[view addSubview:vuforia.view]; // Overlay view added as subview of AR view

如您所知,您可以在 AppController 中注释掉 startUnity() 以防止在应用程序启动时出现 AR View ,并在另一个 VC 中调用它以返回到 AR View 。这种方法让我可以在 AR View 和其他几个 VC 之间导航,但最终应用程序不稳定,必须用完全在 Unity 中构建的应用程序替换。也许您可以找到更好的方法,但您最好还是深入研究 Unity 和插件,具体取决于您希望您的应用执行的操作。希望这可以帮助。

关于iphone - vuforia 和 uinavigationcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587741/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com