Создаю View-based приложение (назовем его Foo). Сразу скажу, что оно должно поддерживать только ландшафную (альбомную) ориентацию. Мне в приложении надо несколько View, у каждого свое содержимое (кнопки, изображения...) Вот и в FooViewController.h я пишу:
#import <UIKit/UIKit.h>
@interface FooViewController : UIViewController {
IBOutlet UIView *one;
IBOutlet UIView *two;
}
@property (nonatomic, retain) UIView *one;
@property (nonatomic, retain) UIView *two;
- (IBAction) fromOneToTwo: (id) sender; // Переключение от первой ко второй
- (IBAction) fromTwoToOne: (id) sender; // переключение от второй к первой
@end
В файле FooViewController.m соответственно:
#import "FooViewController.h"
@implementation FooViewController
@synthesize one;
@synthesize two;
- (IBAction) fromOneToTwo: (id) sender
{
self.view = two;
}
- (IBAction) fromTwoToOne: (id) sender
{
self.view = one;
}
Поскольку мне нужна только ландшафтная ориентация в этом же файле раскомментирую и исправляю уже предусмотренную функцию:
- (BOOL)shouldAutorotateToInterfaceOrientation

//Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
Все сохраняю.
Теперь открываю FooViewController.xib , запускается Interface Builder. Из Library беру View и тяну в окно FooViewController.xib . Теперь там уже два View. Выбираю первое. В свойствах View Attributes свойство Orientation делаю Landscape, задаю ему к-л цвет. Ложу на него кнопку, делаю ей Title у нее будет Button One. Все тоже делаем со вторым View (ориентация, цвет, кнопка Button Two). Потом в окне FooViewController.xib соединяю, удерживая Cntrl, File's Owner и первый View, выбираю из pop-up окна one. Аналогично со вторым View. Потом действия кнопок Touch Up Inside соединям с fromOneToTwo: и fromTwoToOne: . Сохраяем, запускаем. Как и должно было быть, девайс-симулятор расположился правильно и View видно так, как когда мы его редактировали. Жмем кнопку - упс, View переключается на другое только оно уже абы-как, то есть кнопка в другом месте и расположена она и ее надпись вертикально, то есть как бы повернулась в портретную ориетацию. Поворот девайса нам ничего не дает, также как и вызов функции [self shouldAutorotateToInterfaceOrientation:self.InterfaceOrientation] в функции fromOneToTwo , так как она по сути ничего не делает только возвращает булевское значение. Просто изменить self.InterfaceOrientation на UIInterfaceOrientationLandscapeLeft нельзя, ругается: Object cannot be set - either readonly or no setter found. Хоть плачь...