Mam aplikację, która składa się z interfejsu użytkownika Xcode Storyboard i hostowanego projektu Unity3D/Vuforia dla jednego z widoków. Wcześniej używałem Unity 4.6.2 i Vuforia 3.0.9 i miałem zaimplementowaną podklasę UnityAppDelegate z następującą metodą, która pozwoliła mi to zrobić.Hierarchia ViewController w iOS została zmieniona przy użyciu Unity 4.6.5 i aktualizacji Vuforia 4.2
-(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;
}
Pisałem także rozszerzenie UINavigationController dalej obsługiwać zmiany rotacji w dół mojego widoku stosu (ładowanie różnych obrazów w zależności od orientacji).
Jednak musiałem zaktualizować moją aplikację, aby korzystać z Unity3D 4.6.5 i Vuforia 4.2 ze względu na 64-bitowe wymaganie dotyczące przesyłania aplikacji do App Store. To spowodowało kilka problemów.
- Powyższa metoda createViewHierarchyImpl nie działa już w tym stanie. To było rzucanie błąd wykonania:
kończące aplikację spowodowane nieprzechwyconego wyjątek „UIViewControllerHierarchyInconsistency”, powód: „Widok dziecko Kontroler: PPARStartViewController: 0x17dc3070 powinien mieć widok rodzic Kontroler: UnityDefaultViewController: 0x1c083200 ale rzeczywista dominującej jest: UINavigationController: 0x17dc3820 "
musiałem go zmienić na następujące:
-(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;
}
- Doing powyższe zmiany hierarchii z przed, a mój UINavigationControl Klasa rozszerzenia ler nie przechwytuje już wywołań rotacyjnych. Są teraz przechwytywane przez UnityDefaultViewController. Próbowałem rozszerzyć tę klasę w ten sam sposób, ale w czasie wykonywania ten widok kontroler wydaje się nie mieć dzieci, rodziców ani żadnego związku z aktualnie załadowanymi widokami.
- Wreszcie, i być może nie związane, ale jestem pewien, że może być, widok Vuforia nie obraca się prawidłowo. Portret i Pejzaż są w porządku, ale w trybie Krajobraz i Noc, obraz kamery jest odwracany.
Solutions mam nadzieję, dla:
- Idealnie Mam nadzieję, że ktoś może mi powiedzieć, że mój oryginalny kod na pytanie 1 jest to możliwe, a ja po prostu czegoś brakuje, że rozwiązuje związek rodzicielski moje kontrolery widoku.
- Jeśli nie, to muszę dowiedzieć się, jak przekazać powiadomienia o rotacji z UnityDefaultViewController do mojego kontrolera UINavigationController.
- Wreszcie, czy istnieje sposób na zatrzymanie obracania widoku UnityPlayer? Nie ma w nim nic oprócz źródła kamery i rozszerzonej zawartości, więc rzeczywisty widok nie musi się nawet obracać.
Miałem również problemy podczas aktualizacji do Unity 5 z Vuforią 4.x, ale były one związane z innymi wtyczkami iOS. Podczas sprawdzania, co się dzieje, widziałem kilka komentarzy na temat 'createViewHierarchy' nie jest już używane. Być może pomaga to sprawdzić komentarze w wygenerowanych plikach klasy/nagłówka _Classes/UI/UnityAppController + ViewHandling.h_. Zachowaj ostrożność, jeśli użyjesz IMPL_APP_CONTROLLER_SUBCLASS do zarejestrowania własnego kontrolera aplikacji, ponieważ Vuforia robi to samo, co kończy się niezdefiniowanym zachowaniem, z którego jeden jest używany w końcu. – Kay
Nadal używam jedności 4.6.6, więc nie jestem pewien, czy alternatywny do createViewHierarchy jest dostępny. Ale spojrzę na te jutro. Użyłem też własnego kontrolera aplikacji, ale po aktualizacji połączyłem go z wersją Vuforia. – Dover8
Dzięki @Kay, twój komentarz wysłał mnie na ścieżkę do odpowiedzi, którą opisałem poniżej. – Dover8