Интересно, не игнорируется ли это в той степени, в которой уже выполняется транзакция анимации при вызове layoutSubviews. Одна вещь, которую вы можете попытаться подтвердить, это переопределить -didRotateFromInterfaceOrientation и вызвать оттуда ваши layoutSubviews. Посмотрите, оживляются ли ваши взгляды.
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// [self layoutSubviews];
// Give it a second to settle after the rotation and then call
// layoutSuviews explicitly.
[self performSelector:@selector(layoutSubviews) withObject:nil afterDelay:1.0f];
}
Еще одна вещь, о которой стоит подумать, это то, что, поскольку вы только анимируете положение слоя UIView, вы можете использовать анимацию UIView вместо явной анимации. Что-то вроде:
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)
{
NSLog(@"Orientation: Portrait");
//Hide icon
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2.7f];
[iconImageView setCenter:iconThinPosition];
[textImageView setCenter:textThinPosition];
[UIView commitAnimations];
}
else if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
{
NSLog(@"Orientation: Landscape");
// Show Icon
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2.7f];
[iconImageView setCenter:iconShownPosition];
[textImageView setCenter:textShownPosition];
[UIView commitAnimations];
}