Вы можете справиться с этим одним из двух способов. Первый - это то, что вы предложили, и измените все их кадры, а второй - просто создать отдельное представление в горизонтальном режиме и выключить его при вращении.
Для обоих случаев вам необходимо реализовать эти два метода
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
-(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if (toInterfaceOrientation==UIInterfaceOrientationPortrait || toInterfaceOrientation== UIInterfaceOrientationPortraitUpsideDown) {
//put the portrait orientation here
self.usernameField.frame=CGRectMake(xPortraitLocation, yPortraitLocation, xWidth, yWidth);
...
}
else{
//do the same thing with everything but for landscape mode
}
В отдельном представлении вы просто отключаете их, говоря self.view = self.lanscapeView или self.portraitView.
Если я собираюсь использовать первый метод, мне иногда хотелось бы создать поддельное представление в конструкторе интерфейса, чтобы я мог поместить все свои элементы в правильные местоположения и заглянуть под вкладку расположения, что исключает угадывание и проверку назначения число.
Надеюсь, это поможет.