Kit Ng
Kit Ng

Reputation: 993

How to allow only particular view to rotate? (iPhone)

I am installing AdMob's ad, and there is a GADBannerView.

After installing, a banner show, and if you click on it, a page will slide out coving the whole screen, and displaying advertising contents in it.

The question is, some advertising contents, such as video, had to be played landscape. However, I don't want other part of my application to rotate, as the app is not designed to be viewed in landscape.

So, how can I implement something which can achieve such function?

Upvotes: 0

Views: 2448

Answers (3)

RajPara
RajPara

Reputation: 2281

Are you working with iOS 6? You should be able to just restrict what orientations your view controller handles in this case. For example, in your view controller that handles your GADBannerView, you can just put:

// Tell the system what we support
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

// Tell the system It should autorotate
- (BOOL) shouldAutorotate {
    return NO;
}

// Tell the system which initial orientation we want to have
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

And that should make it so that your viewcontroller only supports portrait.

Upvotes: 1

Satish Azad
Satish Azad

Reputation: 2312

Try to use Notification for this. a notification calls a selector every time when ur device orientation is changed.

write this in your viewDidLoad:

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setScreenWithDeviceOrientation:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

and then define the selector as follows:

-(void)setScreenWithDeviceOrientation:(NSNotification *)notification
{
  UIDeviceOrientation orientation=[[UIDevice currentDevice] orientation];

  if(orientation==UIInterfaceOrientationPortrait)  //Portrait orientation
    {
       // setView frame for portrait mode    
    }
    else if(orientation==UIInterfaceOrientationPortraitUpsideDown)  // PortraitUpsideDown
    {
        // setView frame for upside down portrait mode 
    }
    else if(orientation==UIInterfaceOrientationLandscapeLeft)
    {
       // setView frame for Landscape Left mode 
    }
    else if(orientation==UIInterfaceOrientationLandscapeRight)  //landscape Right
    {
        // setView frame for Landscape Right mode 
    }
    else
    {
        NSLog(@"No Orientation");

    }

}

this method fired everytime when ur device changes orientation. Based on the current orientation you should adjust your view.

I hope this will help you.

Upvotes: 1

David van Driessche
David van Driessche

Reputation: 7046

Have you looked at this question and answer? This explains how a single view can work in a certain orientation that is not supported by the rest of the application:

AutoRotate ONLY MpMoviePlayerControler iOS 6

Upvotes: 0

Related Questions