Если есть несколько подпредставлений, которые нужно разнести по-разному в альбомной и портретной ориентации, то может быть проще взломать его с помощью дополнительного UIView, скажем, landscapeView, добавленного в IB. Загрузите этот вид с помощью кнопок, подпредставлений и т. Д. И выложите его так, как вам нравится. Вы можете использовать все те же соединения, что и при обычном (портретном) виде. Не забудьте объявить IBOutlet UIView *landscapeView;
в заголовке. Затем вы можете добавить вид, используя это:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation
duration:(NSTimeInterval)duration
{
if ([landscapeView superview]) {
if (toOrientation == UIInterfaceOrientationPortrait ||
toOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[landscapeView removeFromSuperview];
}
} else {
if (toOrientation == UIInterfaceOrientationLandscapeLeft ||
toOrientation == UIInterfaceOrientationLandscapeRight) {
[[self view] addSubview:landscapeView];
}
}
}
Если время не работает так, как вам нравится, то вы также можете попробовать нечто подобное внутри
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
Если вы хотите стать еще более любопытным, вы можете оставить основной вид пустым, создать как UIView *portraitView
, так и UIView *landscapeView
, затем удалить текущий вид в willRotateToInterfaceOrientation
и добавить новый вид в didRotateToInterfaceOrientation
.
Чтобы быть в безопасности, вы также должны убедиться, что изначально отображается правильный вид:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UIInterfaceOrientation toOrientation = self.interfaceOrientation;
if (toOrientation == UIInterfaceOrientationPortrait ||
toOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[self.view addSubview:portraitView];
} else {
[self.view addSubview:landscapeView];
}
}
, а также
- (void)viewWillDisappear:(BOOL)animated
{
if ([landscapeView superview]) {
[landscapeView removeFromSuperview];
}
if ([portraitView superview]) {
[portraitView removeFromSuperview];
}
}