前段時(shí)間我們播放器強(qiáng)制橫屏,項(xiàng)目設(shè)置允許豎屏,在手機(jī)不鎖屏狀態(tài)下,手機(jī)橫屏?xí)?dǎo)致播放器強(qiáng)制橫屏的時(shí)候會導(dǎo)致橫屏失敗,下面是強(qiáng)制橫屏的解決辦法以及我的探究.
首先恰梢,在【General】-->【Device Orientation】設(shè)置僅支持豎屏
接下來在AppDelegate中設(shè)置
在AppDelegate.h中添加是否允許橫屏的標(biāo)記
/*** 是否允許橫屏的標(biāo)記 */
@property (nonatomic,assign)BOOL allowRotation;
在AppDelegate.m中添加轉(zhuǎn)屏的代理方法
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (self.allowRotation) {
return UIInterfaceOrientationMaskLandscapeRight;
}
return UIInterfaceOrientationMaskPortrait;
}
先設(shè)置
AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
appDelegate.allowRotation = YES;
接下來有兩種辦法可以在某個(gè)界面設(shè)置強(qiáng)制橫屏
第一種.先把設(shè)備狀態(tài)設(shè)置為豎屏,再強(qiáng)制橫屏
//這句話是防止手動先把設(shè)備置為橫屏[設(shè)備已經(jīng)傾斜],導(dǎo)致下面的語句失效.
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"];
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
第二種.設(shè)置強(qiáng)制橫屏,再調(diào)用
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
//讓屏幕方向與設(shè)備方向統(tǒng)一
[UIViewController attemptRotationToDeviceOrientation];
這樣就解決手機(jī)不鎖屏狀態(tài)下的強(qiáng)制橫屏導(dǎo)致的問題,但是為什么產(chǎn)生這些問題呢,請看下我接下來的探究.
接下來說下橫屏失敗的原因:
用戶先向左轉(zhuǎn)了設(shè)備的方向才點(diǎn)擊橫屏,在強(qiáng)制頁面向右(也就是設(shè)備向左)橫屏?xí)r哨颂,雖然項(xiàng)目是只允許豎屏的,屏幕界面方向也一直是豎屏的瓷患,但設(shè)備本身的方向(也就是[UIDevice currentDevice].orientation)其實(shí)已經(jīng)是向左,此時(shí)其實(shí)kvc強(qiáng)制設(shè)置的值和本來的值是一樣的塑猖,這就導(dǎo)致了屏幕界面不轉(zhuǎn)動竹祷,所以可以先強(qiáng)制轉(zhuǎn)到另一個(gè)方向再轉(zhuǎn)回來,或者使用attemptRotationToDeviceOrientation方法使屏幕界面和設(shè)備方向同步羊苟。其他方向同理塑陵,另外,若用戶啟用了設(shè)備方向鎖蜡励,用戶無論如何旋轉(zhuǎn)設(shè)備其設(shè)備方向都不變令花,也就不會有此問題。
下面是我的思路:
在屏幕沒有鎖定的時(shí)候,手機(jī)為橫屏的時(shí)候,播放器橫屏?xí)r候沒有橫屏
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
但是播放器界面并沒有變?yōu)槿?根據(jù)效果我覺得有可能是寬高問題導(dǎo)致的,因此我先獲取手機(jī)的屏幕方向
[UIApplication sharedApplication].statusBarOrientation
在獲取手機(jī)的設(shè)備方向
[UIDevice currentDevice].orientation
發(fā)現(xiàn)屏幕方向和設(shè)備方向不一致
接下來使屏幕方向和設(shè)備方向一致,就可以解決問題
參考文章
iOS 獲取屏幕方向