Я бы посоветовал сделать первое, что вы сказали, что не сделаете:
Я хочу использовать определенный файл xib для портретного / альбомного режимов, а не
Разместите объекты по-разному, используя код
Я потратил много времени, пытаясь использовать другой XIB для другой ориентации, но вот сделка:
1) Если у вас есть UITextField в книжной ориентации, то при повороте в альбомную ориентацию вы должны быть уверены, что текст в портретной ориентации, например, одинаковый в альбомной ориентации. Вы должны сделать это для каждого объекта.
2) Даже если вы не обращаете внимания на пункт 1) Я так и не смог успешно реализовать решение для двух xibs. Я не говорю, что вы не можете этого сделать, я просто говорю из своего опыта, что я не смог этого достичь.
Итак, если вы хотя бы подумаете о решении 1 xib, я мог бы объяснить немного:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)orientation{
}
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
NSLog(@"My view will rotate");
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
[self viewsPositionPortrait];
} else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
[self viewsPositionLandScape];
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
NSLog(@"Register should rotate");
return YES;
}
-(void)viewsPositionPortrait{
// Создать рамку для ваших "oneOfmyViews" для поворота портрета
oneOfMyviews.frame = CGRectMake (..., ...., ..., ...);
}
-(void)buttonsPositionLandScape{
// Создать рамку для ваших "oneOfmyViews" для поворота ландшафта
oneOfMyviews.frame = CGRectMake (..., ...., ..., ...);
}
Затем вы можете в методах viewsPosition определить кадры вашего представления. Что ты выиграл?
1) Чистый код.
2) Красивые переходы.
3) Укажите размер содержимого представления прокрутки легко.
Для вас проблема с вращением ваших UIViews => CustomViewController => UIScrollView.
Вы можете сделать что-то вроде этого:
1) Сделайте то же самое в вашем пользовательском представлении (методы выше) для ваших UIViews внутри вашего CustomViewController.
2) В представлении с пользовательскими контроллерами CustomView можно выполнять следующие действия:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
//(everything that i posted above)
[myCustomViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
Таким образом, вы будете вращать UIViews внутри вашего customViewController. Последний совет: отключите autoresize-subviews и уберите все авторазмеры из ваших UIViews (потому что вы будете определять их фрейм индивидуально).