Dov*_*er8 5 objective-c unity-game-engine ios vuforia
我有一个应用程序,包括Xcode Storyboard UI和一个托管的Unity3D/Vuforia项目的其中一个视图.我之前使用的是Unity 4.6.2和Vuforia 3.0.9,并使用以下方法实现了UnityAppDelegate子类,这使我可以执行此操作.
-(void)createViewHierarchyImpl
{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"AR" bundle:nil];
PPARStartViewController * helloVC = (PPARStartViewController *)[sb instantiateViewControllerWithIdentifier:@"StartController"];
self.navController = [[UINavigationController alloc] initWithRootViewControllier:helloVC];
self.navController.navigationBarHidden = YES;
_rootController = self.navController;
_rootView = self.navController.view;
}
Run Code Online (Sandbox Code Playgroud)
我还写了一个UINavigationController扩展来处理视图堆栈中的旋转变化(根据方向加载不同的图像).
但是,由于64位要求将应用程序提交到App Store,我不得不更新我的应用程序以使用Unity3D 4.6.5和Vuforia 4.2.这引起了一些问题.
由于未捕获异常'UIViewControllerHierarchyInconsistency'而终止应用程序,原因:'子视图控制器:PPARStartViewController:0x17dc3070应该有父视图控制器:UnityDefaultViewController:0x1c083200但实际父节点是:UINavigationController:0x17dc3820'
我不得不将其更改为以下内容:
-(void)createViewHierarchyImpl
{
_rootController = [[UIViewController alloc] init];
_rootView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_rootController.view = _rootView;
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"AR" bundle:nil];
PPARStartViewController * helloVC = (PPARStartViewController *)[sb instantiateViewControllerWithIdentifier:@"StartController"];
self.navController = [[UINavigationController alloc] initWithRootViewController:helloVC];
[_rootView addSubview:self.navController.view];
self.navController.navigationBarHidden = YES;
}
Run Code Online (Sandbox Code Playgroud)
我希望的解决方案:
通过研究 UnityAppController+ViewHandling.mm 并将其与 Unity 4.6 之前的旧版本进行比较,我找到了一个解决方案。
在 VuforiaNativeRendererController.mm 中,我还实现了 createAutorotatingUnityViewController 方法。在这里,我返回一个新的 UnityDefaultViewController 实例(这就是 createViewHierarchyImpl 用来做的事情)。
-(UIViewController*)createAutorotatingUnityViewController
{
return [[UnityDefaultViewController alloc] init];
}
Run Code Online (Sandbox Code Playgroud)
然后在 UnityAppController.mm 中,我从新的 checkOrientationRequest 方法中删除了代码,并在 onForcedOrientation 中交换了
[self transitionToViewController:[self createRootViewController]];
Run Code Online (Sandbox Code Playgroud)
到旧的方式:
OrientView(_rootController, _rootView, orient);
[_rootView layoutSubviews];
Run Code Online (Sandbox Code Playgroud)
毕竟,我能够使用 createViewHierarchyImpl 的原始代码并保留对旋转的控制。
AR 相机视图仍然会翻转一些旋转,但我现在认为这是一个单独的问题。
[编辑] 我弄清楚了为什么 AR 相机视图没有定向。我需要将旋转通知传递给将 UnityView 作为子视图的视图控制器,然后调用
[subView willRotateTo:ConvertToUnityScreenOrientation(toInterfaceOrientation, 0)];
Run Code Online (Sandbox Code Playgroud)
现在所有轮换都按预期进行。:)
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |