iOS 強(qiáng)制橫豎屏

最近在修改直播項(xiàng)目出現(xiàn)的問題,需要在直播頁面強(qiáng)制進(jìn)入橫屏,記錄下遇到的坑,稍后會(huì)寫一篇阿里云直播的文章.


  • 程序單獨(dú)頁面強(qiáng)制改變方向(橫豎屏)

在需要改變屏幕方向的類使用這個(gè)方法 (需要設(shè)置DeviceOrientation方向)
CC9E3A21-1E61-48E9-B083-EE9033F200E0.png
   if([[UIDevice currentDevice]respondsToSelector:@selector(setOrientation:)]) //判斷對(duì)象是否響應(yīng)setOrientation方法 
   respondsToSelector實(shí)例方法,判斷對(duì)象是否響應(yīng)某個(gè)方法instancesRespondToSelector類方法,判斷類是否響應(yīng)某個(gè)方法
     {
        SEL selector = NSSelectorFromString(@"setOrientation:");
         //NSInvocation對(duì)象只能使用其類方法來初始化衬潦,不可使用alloc/init方法。它執(zhí)行調(diào)用之前疟赊,需要設(shè)置兩個(gè)方法:setSelector: 和setArgument:atIndex:
//創(chuàng)建簽名函數(shù)
         NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
//設(shè)置selector
         [invocation setSelector:selector];
 
         [invocation setTarget:[UIDevice currentDevice]];
 
         int state = UIInterfaceOrientationLandscapeLeft;//需要設(shè)置的狀態(tài)
    UIInterfaceOrientationUnknown            =        UIDeviceOrientationUnknown,
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,//垂直,home 鍵在下
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,//垂直,home 鍵在上
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,//水平,home 鍵在右
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft//水平,home 鍵在左
 //atIndex的下標(biāo)必須從2開始.原因:0 1 兩個(gè)參數(shù)已經(jīng)被target 和selector占用
         [invocation setArgument:&state atIndex:2];
 //消息調(diào)用
         [invocation invoke];
}```
///因?yàn)椴幌敫膭?dòng)以前的代碼,所以我寫了類別來改變屏幕(此處有坑,如果使用UITabBarController也要給UITabBarController的分類添加方法)
///查了資料蓉冈,只需要自定義 UINavigationController就可以實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)向,寫demo驗(yàn)證的卻如此,但引用到項(xiàng)目不行, 強(qiáng)制轉(zhuǎn)向的類還是會(huì)收到感應(yīng)的影響.排查后發(fā)現(xiàn)是因?yàn)轫?xiàng)目使用了UITabBarController,所以要自定義UITabBarController UINavigationController UIViewController 不想更改項(xiàng)目可寫category
//是否允許轉(zhuǎn)向
 -(BOOL)shouldAutorotate{
    return YES;
}
//支持的方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
//對(duì)需要定向的類單獨(dú)設(shè)置
    if ([self.visibleViewController isKindOfClass:[configViewController class]]) {
        return UIInterfaceOrientationMaskLandscapeLeft;//方向設(shè)置
    }
    return UIInterfaceOrientationMaskPortrait;
}
//如一個(gè)頁面支持多個(gè)方向,這里設(shè)置優(yōu)先方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeLeft;
}

但是這并不能解決的遇到的問題,因?yàn)橹辈ト绻嬅鏅M向的話相機(jī)方向也會(huì)偏向90度并無法調(diào)節(jié),設(shè)置transform屬性旋轉(zhuǎn)90度也會(huì)造成相機(jī)方向偏移,嘗試無果后只好改變思路,橫向布局頁面,橫向布局只需將控件按照方向旋轉(zhuǎn)即可,造成橫屏的假象(如果不使用阿里云直播,使用上面的方法即可)
阿里云直播如果需要做橫豎屏的話,要根據(jù)當(dāng)前手機(jī)的感應(yīng)狀態(tài)來做相應(yīng)的適配,這是很坑的一點(diǎn)

判斷手機(jī)的感應(yīng)方向(偽橫豎屏切換,只需要設(shè)置DeviceOrientation為Portrait)

//監(jiān)聽手機(jī)方向改變
 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDeviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
//此處對(duì)相應(yīng)的狀態(tài)做處理
- (void)handleDeviceOrientationDidChange:(UIInterfaceOrientation)interfaceOrientation
{
    UIDevice *device = [UIDevice currentDevice] ;
    switch (device.orientation) {
        case UIDeviceOrientationFaceUp:
            NSLog(@"屏幕朝上平躺");
            break;
        case UIDeviceOrientationFaceDown:
            NSLog(@"屏幕朝下平躺");
            break;
        case UIDeviceOrientationUnknown:
            NSLog(@"未知方向");
            break;
        case UIDeviceOrientationLandscapeLeft: {
            NSLog(@"屏幕向左橫置");
        }
            break;
        case UIDeviceOrientationLandscapeRight: 
            NSLog(@"屏幕向右橫置");
            break;
        case UIDeviceOrientationPortrait: 
        { NSLog(@"屏幕直立");
        }
            break;
        case UIDeviceOrientationPortraitUpsideDown: 
            NSLog(@"  屏幕直立 上下顛倒");
            break;
        default: NSLog(@"無法辨認(rèn)"); 
            break;
        }
    } 
//銷毀通知
- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

 以上是我對(duì)橫豎屏切換的一些見解,歡迎大家一起討論. 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捌朴,一起剝皮案震驚了整個(gè)濱河市蚓土,隨后出現(xiàn)的幾起案子厦取,更是在濱河造成了極大的恐慌赏酥,老刑警劉巖喳整,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裸扶,居然都是意外死亡框都,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門呵晨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏保,“玉大人,你說我怎么就攤上這事摸屠∥铰蓿” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵餐塘,是天一觀的道長(zhǎng)妥衣。 經(jīng)常有香客問我皂吮,道長(zhǎng)戒傻,這世上最難降的妖魔是什么税手? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮需纳,結(jié)果婚禮上芦倒,老公的妹妹穿的比我還像新娘。我一直安慰自己不翩,他們只是感情好兵扬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著口蝠,像睡著了一般器钟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妙蔗,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天傲霸,我揣著相機(jī)與錄音,去河邊找鬼眉反。 笑死昙啄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寸五。 我是一名探鬼主播梳凛,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梳杏!你這毒婦竟也來了韧拒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤秘狞,失蹤者是張志新(化名)和其女友劉穎叭莫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烁试,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雇初,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了减响。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靖诗。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖支示,靈堂內(nèi)的尸體忽然破棺而出刊橘,到底是詐尸還是另有隱情,我是刑警寧澤颂鸿,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布促绵,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏败晴。R本人自食惡果不足惜浓冒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尖坤。 院中可真熱鬧稳懒,春花似錦、人聲如沸慢味。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯路。三九已至或油,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驰唬,已是汗流浹背装哆。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留定嗓,地道東北人蜕琴。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宵溅,于是被迫代替她去往敵國(guó)和親凌简。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容