willRotateToInterfaceOrientation вызывается до изменения ориентации, следовательно, ваш UIView по-прежнему будет иметь старый размер.Попробуйте вместо этого использовать didRotateFromInterfaceOrientation.
Кроме того, для дополнительного эффекта я бы скрыл scrollView (возможно, с внутренним блоком UIAnimation) в willRotateToInterfaceOrientation, изменил его размер и затем показал бы его в didRotateFromInterfaceOrientation (снова, возможно, внутри блока анимации).
Вот фрагмент из одного из моих приложений:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];
self.myScroll.hidden = YES;
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView commitAnimations];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3f];
self.myScroll.hidden = NO;
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView commitAnimations];
}
Вы можете даже сделать причудливые вещи, проверив новую ориентацию, используя UIInterfaceOrientationIsPortrait (ориентация) или UIInterfaceOrientationIsLandscape (ориентация).