0

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 回回転させた後、アプリの動作が非常に遅くなります。前の子ビューを削除しているので、正しいとは思わないでしょうか? ビューコントローラーが却下/削除されているのか、それともここで何か他のことが起こっているのでしょうか?

ご指導ありがとうございます

4

0 に答える 0