我已将我的Xcode更新为4.5,我已实现了以下的方向方法
-(BOOL)shouldAutorotate{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;
}
我在willRotateToInterfaceOrientation方法中设置按钮,标签,图像的帧大小
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait )||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown ))
{
// set frame sizes for portait
}
else if(( [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft )||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight ))
{
// set frame sizes for landscape
}
}
但有时在旋转模拟器时没有调用此方法 有时模拟器在从另一个viewController导航时没有检测到方向。我检查了info.plist文件 - 没关系。
答案 0 :(得分:4)
Apple不会在IOS 6.0中调用shouldAutorotatetoInterfaceOrientation调用,除非您告诉主窗口哪个视图控制器将其发送到。
我通过将window.rootViewController设置为我的应用程序的顶级视图控制器来在我的应用程序中工作
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
window.rootViewController = topLevelViewController;
...
}
我的应用程序的iPhone版本仅支持两个纵向方向,因此我的顶级iPhone视图控制器需要一种新方法:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait |
UIInterfaceOrientationMaskPortraitUpsideDown;
}
这是关于Buzz Touch的讨论。
答案 1 :(得分:0)
Apple已经弃用了ios6的shouldautorate方法,而是使用这些方法
- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);
// Returns interface orientation masks.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0);