iPhone
最暴力的方法:
首先要强制应用只能响应竖屏,在AppDelegate中添加以下方法。返回的枚举值,包含了很多种,竖屏、横屏向左、横屏向右等,这里我们只要竖屏。
- (UIInterfaceOrientationMask)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window {returnUIInterfaceOrientationMaskPortrait;}
针对部分view:
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscape;
}
在需要横屏的 view 上加一个这个就可以了.切到这个 view 自动横屏
直接上代码:
希望可以帮助到像以前我一样苦苦找资料的同志。
#import "CustomNavigationController.h"
@interface CustomNavigationController ()
@end
@implementation CustomNavigationController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations{
//return UIInterfaceOrientationMaskLandscapeRight;
return self.orietation;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != self.orietation);
}
iPad
在iPad应用开发时如何让设备只支持横屏(landscape)模式,我做了多次尝试,并没有发现比较简捷的设置方法。我尝试了大概大概3种方式。1、通过XCode设置“iPad Deployment info”,只选择横屏左和横屏右,部署测试后并没有生效,这种方法实质是在xxx_info.plist项目配置文件中添加如下信息:UISupportedInterfaceOrientations~ipadUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRight
2、通过对每个nib文件在IB中设置orientation为landscape,此法也不生效。
3、重载shouldAutorotateToInterfaceOrientation:方法,这种方式是可行的。具体如下:- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{ // Return YES for supported orientationsreturn ((interfaceOrientation ==UIDeviceOrientationLandscapeLeft)||(interfaceOrientation ==UIDeviceOrientationLandscapeRight));}
如果第一种方式生效,那么比较完美。虽然第三种方式可以完全满足横屏的需求,但是实现起来比较stupid,需要在每个controller中都重载shouldAutorotateToInterfaceOrientation:方法,当然也可以通过扩展UIViewController的方式来避免重复劳动。但是感觉也有点不太直接,期待有人指出sdk本身是否就有简捷方式支持。