4 つのビュー コントローラーを備えたストーリーボードがあります。1 - initialViewController 2 - PortraitViewController 3 - LeftLandscapeViewController 4 - RightLandscapeViewController。
デバイスが回転すると、新しいビューコントローラーが childViewController としてロードされ、最後の childViewController が削除されます (存在する場合)。
- (void)switchViews:(NSString*)storyboardId
{ __block UIViewController *lastController = _childController;
_childController = (UIViewController*)[self.storyboard instantiateViewControllerWithIdentifier:storyboardId];
[self addChildViewController:_childController];
[_parentView addSubview:_childController.view];
CGRect parentRect = _parentView.bounds;
parentRect.origin.x += parentRect.size.width;
_childController.view.frame = parentRect;
_childController.view.alpha = 0;
[UIView animateWithDuration:0.3 animations:^{
_childController.view.frame = _parentView.bounds;
_childController.view.alpha = 1.0;
} completion:^(BOOL finished) {
if (lastController) // removes previous viewController
{
[lastController.view removeFromSuperview];
[lastController removeFromParentViewController];
}
}];
}
-(void)updateOrientationView
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
// ---> LANDSCAPE ROTATION
if(UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeRightView)
{
if (deviceOrientation == UIDeviceOrientationLandscapeRight)
{
if([lastOrientation isEqual:@"landscapeRight"])
{
//NSLog(@"ROTATE TO LANDSCAPE RIGHT VIEW");
}else{
[self switchViews:@"landscapeRight"];
lastOrientation = @"landscapeRight";
NSLog(@"ROTATE TO LANDSCAPE RIGHT VIEW");
}
}
if (deviceOrientation == UIDeviceOrientationLandscapeLeft)
{
if([lastOrientation isEqual:@"landscapeLeft"])
{
//
}else{
[self switchViews:@"landscapeLeft"];
lastOrientation = @"landscapeLeft";
NSLog(@"ROTATE TO LANDSCAPE LEFT VIEW");
}
}
}
if(UIDeviceOrientationIsPortrait(deviceOrientation) && !isShowingPortraitView)
{
// ---> PORTRAIT
if (deviceOrientation == UIDeviceOrientationPortrait)
{
if([lastOrientation isEqual: @"portrait"])
{
//
}else{
[self switchViews:@"portrait"];
lastOrientation = @"portrait";
NSLog(@"ROTATE TO PORTRAIT VIEW");
}
}
// ---> PORTRAIT UPSIDE DOWN
if (deviceOrientation == UIDeviceOrientationPortraitUpsideDown)
{
//lastOrientation = @"portraitUpsideDown";
// do nothing
}
}
}
デバイスでアプリを実行すると、アプリを横向きにしてから縦向きに約 8 回回転させた後、アプリの動作が非常に遅くなります。前の子ビューを削除しているので、正しいとは思わないでしょうか? ビューコントローラーが却下/削除されているのか、それともここで何か他のことが起こっているのでしょうか?
ご指導ありがとうございます