Is there a documented way to set the iPhone orientation?

后端 未结 17 1279
清歌不尽
清歌不尽 2020-11-22 11:09

I have an app where I would like to support device rotation in certain views but other don\'t particularly make sense in Landscape mode, so as I swapping the views out I wou

17条回答
  •  情深已故
    2020-11-22 11:59

    I was having an issue where I had a UIViewController on the screen, in a UINavigationController, in landscape orientation. When the next view controller is pushed in the flow, however, I needed the device to return to portrait orientation.

    What I noticed, was that the shouldAutorotateToInterfaceOrientation: method isn't called when a new view controller is pushed onto the stack, but it is called when a view controller is popped from the stack.

    Taking advantage of this, I am using this snippet of code in one of my apps:

    - (void)selectHostingAtIndex:(int)hostingIndex {
    
        self.transitioning = YES;
    
        UIViewController *garbageController = [[[UIViewController alloc] init] autorelease];
        [self.navigationController pushViewController:garbageController animated:NO];
        [self.navigationController popViewControllerAnimated:NO];
    
        BBHostingController *hostingController = [[BBHostingController alloc] init];
        hostingController.hosting = [self.hostings objectAtIndex:hostingIndex];
        [self.navigationController pushViewController:hostingController animated:YES];
        [hostingController release];
    
        self.transitioning = NO;
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
        if (self.transitioning)
            return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
        else
            return YES;
    }
    

    Basically, by creating an empty view controller, pushing it onto the stack, and immediately popping it off, it's possible to get the interface to revert to the portrait position. Once the controller has been popped, I just push on the controller that I intended to push in the first place. Visually, it looks great - the empty, arbitrary view controller is never seen by the user.

提交回复
热议问题