我正在使用
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
委托根据方向类型
更改视图的框架即,
if(UIInterfaceOrientationIsLandscape(interfaceOrientation))
{
self.view.frame=CGRectMake(0,0,500,300);
}
else
{
self.view.frame=CGRectMake(0,0,300,400);
}
如何在iOS 6中处理与
相同的情况-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
已在iOS6中弃用。
我正在使用以下委托来设置所有方向。
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationAllMask;
}
但是,
-(BOOL)shouldAutoRotate
{
return YES;
}
未被调用。如何处理这种情况?
答案 0 :(得分:46)
在AppDelegate中,我已将ViewController对象添加到窗口
[self.window addSubView:viewControllerObj]
问题在于以上几行。方向将适用于iOS 5中的上述行,但在iOS中,为了使方向正常工作,请使用
更改上述行 [self.window setRootViewController:viewControllerObj]
然后当方向改变时,app会旋转。
答案 1 :(得分:3)
确保项目和目标中的设置允许每种设备类型的方向。
此外,您shouldAutorotateToInterfaceOrientation:
中的代码可以放入viewDidLayoutSubviews
。
答案 2 :(得分:1)
请记住,在iOS 6中,父母视图中的轮换处理非常谨慎。对childs viewcontrollers的责任较小。但是对于我们来说更烦人的是,在没有Interface builder的情况下编写代码。
答案 3 :(得分:0)
确保启用所有方向。
答案 4 :(得分:0)
在iOS 6中处理UINavigation方向问题
1创建UINavigation + Rotation类别类
2将下面的方法放在UINavigation + Rotation.m类
中-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject]supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
if ([self.viewControllers count] == 0) {
return UIInterfaceOrientationPortrait;
}
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
答案 5 :(得分:0)
此方法适用于IOS 6及旧版本
-(BOOL)rotationChanged:(UIInterfaceOrientation)interfaceOrientation { NSInteger orientation = [[UIDevice currentDevice] orientation]; UIWindow *_window = [[[UIApplication sharedApplication] delegate] window]; if ([PGPlatformUtils GetCurrentPlatform]==PGPlatformEnum_iPhone) { switch (orientation) { case 1: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (0)]; [_window setFrame:CGRectMake(0, 0, 320, 480)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES]; [UIView commitAnimations]; break; case 2: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (M_PI)]; [_window setFrame:CGRectMake(0, 0, 320, 480)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES]; [UIView commitAnimations]; break; case 3: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (M_PI / 2)]; [_window setFrame:CGRectMake(0, 0, 320, 480)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES]; [UIView commitAnimations]; break; case 4: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (- M_PI / 2)]; [_window setFrame:CGRectMake(0, 0, 320, 480)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES]; [UIView commitAnimations]; break; case 5: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (0)]; [_window setFrame:CGRectMake(0, 0, 320, 480)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIPrintInfoOrientationLandscape animated:YES]; [UIView commitAnimations]; break; default: break; } } else{ switch (orientation) { case 1: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (0)]; [_window setFrame:CGRectMake(0, 0, 768, 1024)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES]; NSLog(@"*** 1 Orientation Call 0"); [UIView commitAnimations]; break; case 2: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (M_PI)]; [_window setFrame:CGRectMake(0, 0, 768, 1024)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown animated:YES]; NSLog(@"*** 1 Orientation Call M_PI"); [UIView commitAnimations]; break; case 3: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (M_PI / 2)]; [_window setFrame:CGRectMake(0, 0, 768, 1024)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES]; NSLog(@"*** 1 Orientation Call M_PI/2"); [UIView commitAnimations]; break; case 4: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (- M_PI / 2)]; [_window setFrame:CGRectMake(0, 0, 768, 1024)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES]; NSLog(@"*** 1 Orientation Call - M_PI/2"); [UIView commitAnimations]; break; case 5: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.0]; [_window setTransform:CGAffineTransformMakeRotation (0)]; [_window setFrame:CGRectMake(0, 0, 768, 1024)]; [[UIApplication sharedApplication] setStatusBarOrientation:UIPrintInfoOrientationLandscape animated:YES]; NSLog(@"*** 1 Orientation Call 0"); [UIView commitAnimations]; break; default: break; } } return YES; }
答案 6 :(得分:0)
在iOS6中使用willAnimateRotationToInterfaceOrientation
。