启动时的设备方向

时间:2011-09-28 23:07:08

标签: cocoa-touch ipad uikit

我已经阅读了关于这个主题的所有帖子,但仍然无法弄清楚这个。

我在applicationDidFinishLaunching的窗口中添加了一个VC。 VC包含一个UIImageView。

我想根据设备方向设置UIImageView的图像,但statusBarOrientationdeviceOrientationinterfaceOrientation,我检查的所有内容都会返回肖像。

我必须要有一些简单的东西。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您是否在Info.plist中启用了其他方向?在Xcode 4的项目编辑器中有一个图形编辑器。

答案 1 :(得分:0)

有时候(不确定这是在每种情况下,还是模拟器),应用程序将以一个方向启动,然后立即旋转到另一个方向以匹配设备方向。

我建议实施-[UIViewController willRotateToInterfaceOrientation:duration:]来设置您的图像,应立即调用。

答案 2 :(得分:0)

好吧......似乎有几个问题。 1)模拟器不能如预期那样始终如一地生成方向(或方向变化)。此外,2)在启动时,设备可能(或可能不)及时发送statusBarOrientation信息以读取该信息。所以,我在app delegate的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的动画。 不是很优雅,但它有效。