這是事情,我必須將增強現實功能集成到應用程序中。經過測試,現在我已經準備好整合它了。該應用程序始終以縱向模式運行,我決定以橫向或左側旋轉iPhone時顯示增強現實(當然,如果我以縱向顯示原始視圖控制器,則返回)。事實上,增強現實是以模態方式呈現的。模態視圖控制器在呈現2/3次後不再呈現
我有viewController調用ARViewController(模態)。它可以正常工作,如果我旋轉2或3次,但這個ARViewController不再被調用,但應用程序仍在運行,沒有崩潰,沒有凍結。此ARViewController使用ARController進行初始化,ARController是增強現實所需的一類計算。如果我在沒有ARController的情況下調用這個ARViewcontroller,那麼在視圖控制器之間切換工作得很好,將會調用一個空白窗口,但至少我可以根據需要旋轉設備。所以,這必須來自ARController,我記錄了自己的內存泄漏(按照我使用ARC的方式),我認爲這可能是導致問題的原因,因爲我多次使用此ARController。
但在進一步,我想知道如果我做錯什麼,可以通過視圖控制器之間的切換影響ARController:
這裏是我所說的ARViewController中的viewController:
if (orientation == UIDeviceOrientationLandscapeLeft) {
NSLog(@"ViewController Landscape left");
ARViewController *arVC = [[ARViewController alloc] initWithNibName:@"ARViewController" bundle:nil];
[self setCameraViewController:arVC];
[arVC setModalTransitionStyle: UIModalTransitionStyleFlipHorizontal];
[[self navigationController] presentModalViewController:cameraViewController animated:YES];
arVC = nil;
}
else if (orientation == UIDeviceOrientationLandscapeRight) {
NSLog(@"ViewController Landscape Right");
ARViewController *arVC = [[ARViewController alloc] initWithNibName:@"ARViewController" bundle:nil];
[self setCameraViewController:arVC];
[arVC setModalTransitionStyle: UIModalTransitionStyleFlipHorizontal];
[[self navigationController] presentModalViewController:cameraViewController animated:YES];
arVC = nil;
}
ARViewController的初始化:
- (void)viewDidLoad {
[super viewDidLoad];
self.arController = [[ARController alloc] initWithViewController:self];
arController.filterDiscover = filterDiscover;
arController.filterEat = filterEat;
arController.filterSleep = filterSleep;
// Listen for changes in device orientation
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
//if ViewController presents this modal ARViewController
if(!arController.filterDiscover && !arController.filterEat && !arController.filterSleep)
[arController callAlertViewToFilter];
else
[arController loadData];
}
最後這裏是我回到原來的視圖控制器,如果我旋轉肖像ARViewController:
if (orientation == UIDeviceOrientationPortrait){
NSLog(@"ARViewController Portrait");
[self setArController:nil];
[[super presentingViewController] dismissModalViewControllerAnimated:YES];
}
我試圖儘可能清楚,如果任何人有過類似這樣的問題,也可能是巨大的有一些線索來解決這個問題。我可以顯示ARController的代碼,但它有點太長了,現在我只想知道這裏是否有任何問題。如果需要,我會展示它。
這也許會有幫助,我發現在調試區,該輸出將不被再顯示ARViewController:
2012-10-24 17:57:51.072 beiceland[20348:907] ViewController Landscape Right
2012-10-24 17:57:51.073 beiceland[20348:907] Warning: Attempt to present <ARViewController: 0x203f0c60> on <RevealController: 0x1cd5dca0> while a presentation is in progress!
我試過pushViewController,起初它似乎是顯示AR的最明顯的方式。但由於我的應用程序只有肖像的方向限制(項目設置),當我顯示AR時,只有3/4的屏幕區域是活動的touchesBegan,奇怪...使用模態它工作正常。沒有它,我會使用pushViewController。對不起,我沒有得到你說的那些東西。 –
對不起,我的意思是說,也許你可以發佈代碼[超級presentsViewController] – Snaker
對不起,但唯一我發現足夠接近你的最新警告是[this](http://stackoverflow.com/questions/12596882/modal -uinavigationcontroller-hides-though-not-dismisses) – Snaker