Ну, похоже, было несколько проблем.1) Симулятор не всегда генерирует данные ориентации (или изменения ориентации), как ожидалось.Кроме того, 2) непосредственно при запуске устройство может (или не может) отправить информацию statusBarOrientation вовремя, чтобы прочитать это.Итак, я сделал это прямо в методе didFinishLaunching в делегате приложения.
// add the splash IV to the window per the current orientation, then animate it away
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait){
self.theSplashIV.image = [UIImage imageNamed:@"Default-Portrait~ipad.png"];
self.theSplashIV.frame = CGRectMake(0, 20, 768, 1004);
}
else if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown){
self.theSplashIV.image = [UIImage imageNamed:@"Default-Portrait~ipad.png"];
self.theSplashIV.transform = CGAffineTransformMakeRotation(M_PI);
self.theSplashIV.frame = CGRectMake(0, 0, 768, 1004);
}
else if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft){
self.theSplashIV.image = [UIImage imageNamed:@"Default-Landscape~ipad.png"];
self.theSplashIV.transform = CGAffineTransformMakeRotation(M_PI / 2);
self.theSplashIV.frame = CGRectMake(0, 0, 748, 1024);
}
else if([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight){
self.theSplashIV.image = [UIImage imageNamed:@"Default-Landscape~ipad.png"];
self.theSplashIV.transform = CGAffineTransformMakeRotation(M_PI / -2);
self.theSplashIV.frame = CGRectMake(20, 0, 748, 1024);
}
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
А потом я с задержкой анимировал всплеск IV.Не очень элегантно, но работает.