客戶要求在項(xiàng)目中添加一些html5小游戲兑牡,但是小游戲是要求橫屏的来农。查了之后發(fā)現(xiàn)一旦你在這里選了只支持豎屏之后,無(wú)論怎么改都沒(méi)辦法橫屏了乘盼。
無(wú)奈之下升熊,只能打上勾,找另一種方法來(lái)實(shí)現(xiàn)了蹦肴。
- (BOOL)shouldAutorotate {
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
這個(gè)方法可以實(shí)現(xiàn)僚碎,需要在根視圖(nav,tabbar)和vc里重寫阴幌。
我選的另外一種更簡(jiǎn)單方法是
在AppDelegate.m中
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (_flag == 1) {
return UIInterfaceOrientationMaskLandscapeRight;
}
else
{
return (UIInterfaceOrientationMaskPortrait);
}
}
參數(shù)顯而易見(jiàn)勺阐,UIInterfaceOrientationMask是返回你允許的屏幕狀態(tài),多個(gè)狀態(tài)用|號(hào)矛双。我這里只需要為游戲橫屏渊抽,所以只支持右轉(zhuǎn)。
_flag是一個(gè)AppDelegate的一個(gè)參數(shù)议忽,當(dāng)然懒闷,你也可以用一個(gè)單例類保存。
在你需要它橫屏的VC里栈幸,在viewDidLoad里將_flag改為1愤估。但這里有幾個(gè)點(diǎn)需要注意:
1:使用模態(tài)彈出可以讓屏幕出現(xiàn)的時(shí)候就是橫屏,如果是push速址,它出現(xiàn)的時(shí)候是豎屏的玩焰,雖然在你橫屏之后它不會(huì)再變?yōu)樨Q屏了。
2:可以使用push芍锚,但你需要在IB中將視圖選為橫屏昔园。這樣它push之后直接就是橫屏了。
3.如果你present一個(gè)nav的話并炮。需要自定義一個(gè)nav默刚,同樣的在它的viewDidLoad里將_flag改為1
另外,我還發(fā)現(xiàn)了一個(gè)通過(guò)接受方向通知逃魄,旋轉(zhuǎn)VC.view的方法荤西,它的好處是可以在只支持豎屏的項(xiàng)目里達(dá)到旋轉(zhuǎn)屏幕的效果,缺點(diǎn)在于不是真正意義上的橫屏,狀態(tài)欄皂冰,iphone的上下拉菜單還是豎屏的店展。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
- (void)orientChange:(NSNotification *)noti {
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
switch (orientation)
{
case UIDeviceOrientationPortrait: {
[UIView animateWithDuration:0.25 animations:^{
self.view.transform = CGAffineTransformMakeRotation(0);
self.view.frame = CGRectMake(0, 0, kIPHONE_WIDTH, kIPHONE_HEIGHT);
}];
}
break;
case UIDeviceOrientationLandscapeLeft: {
[UIView animateWithDuration:0.25 animations:^{
self.view.transform = CGAffineTransformMakeRotation(M_PI*0.5);
self.view.frame = CGRectMake(0, 0, kIPHONE_WIDTH, kIPHONE_HEIGHT);
}];
}
break;
case UIDeviceOrientationLandscapeRight: {
[UIView animateWithDuration:0.25 animations:^{
self.view.transform = CGAffineTransformMakeRotation(-M_PI*0.5);
self.view.frame = CGRectMake(0, 0, kIPHONE_WIDTH, kIPHONE_HEIGHT);
}];
}
break;
default:
break;
}
}