views:

36

answers:

1

how would i go about loading a new xib when the orientation of the device is changed? i.e. load a landscape oriented xib when the device is turned into landscape orientation and vice-versa with portrait. and how would i go about automatically detecting an orientation change and adjusting from there?

A: 

apparently all i have to do is create a view based app turn shouldAutoRotateToInterfaceOrientaion to YES, and create two uiviewcontroller subclasses with individual xib files, then add this to the app view controller:

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

and add this method into the app view controller as well:

-(void)orientationChanged {
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) {
        [[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];
    }
    else {
        [[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
    }

}

and thats it, when the device is rotated the xib auto loads in the correct orientation.

edit:you also need to add two viewcontrollers programmatically(@property and @synthesize them also), and two viewcontrollers in the appviewcontroller.xib in IB each with the class name corresponding to the viewcontroller subclass of each xib you created. then add a view connect it to the file's owner and connect the outlets in IB to the view controllers you created in ib and that should be all

Joe