iOS橫豎屏切換的一些坑(持續更新)


  最近在做視頻類的App,遇到視頻滾動播放的坑,緊接着就是橫豎屏問題。之前太過天真不想做橫豎屏配置。只是想旋轉視頻View,但是分享什么的包括AlertView還是豎屏樣式,項目着急上線(1周提交一次也是夠了。。。人家審核都煩了估計)也就一直沒改。昨天開始改才發現是一個深坑!

  因為首頁是滾動播放,不想做橫屏適配,坐標判斷什么的還要改來改去,看了下目前主流App,搜狐做的貌似是最好的。具體效果如圖

(傻傻的我截圖結了半天才截到,我竟然不知道相機有一個功能叫做慢動作)

  他們橫屏轉動的時候后面的tableView不動的,當初就是看了一眼就天真的以為只是轉動個view,其實還是豎屏。。。但是

  緊接着就是網絡判斷啥的,忽然才發現我根本就拉不出來這個面板啊 = =!只能豎着拉有木有

拉出來之后直接豎屏了有木有!!!

所以想到了他們應該是改變界面方向。然后就想,后面tableview不動,那我就手動改界面方向然后轉視頻View唄。

在ios8以前,手動調用

UIApplication *application=[UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];

 

應該可以選擇界面方向,關於界面方向和設備方向,詳見一片楓葉大神的《屏幕旋轉筆記》

但是在我的代碼中調用之后沒反應,后來查找資料發現在我的基類Viewcontroller里

- (BOOL)shouldAutorotate
{
   return YES;
}

 好吧,在顯示視頻窗那里返回NO

- (BOOL)shouldAutorotate
{
    return NO;
}

 發現statusbar轉過去了,視圖什么的都沒動,這時間上拉下拉面板什么的也都對了,彈出的Alertview 方向也正確

就連鍵盤方向都對。好啦,問題貌似解決了。我視頻全屏的時候至於要設置statusbar的方向,然后自己轉下視頻窗體就OK了。

然后我就開開心心睡覺去了。

   第二天。。按着這個思路改了下,發現沒什么問題,分享啥的方向也對,只需要控制視圖大小和旋轉就好了。似乎到這里也就結束了,其實很簡單嘛。。。

   但是,忽然間想到iOS8出來以后貌似UIScreen的bounds會跟着界面方向轉動,bounds改變了會不會又影響,立馬用模擬器跑了一遍,果然有問題

   寬高貌似反了,iOS8果然有坑!幸好記得有這么個情況,詳見為毛iOS8下UIScreen的bonuns改變了

原來在iOS8下面

UIScreen is now interface oriented:

  • [UIScreen bounds] now interface-oriented
  • [UIScreen applicationFrame] now interface-oriented
  • Status bar frame notifications are interface-oriented
  • Keyboard frame notifications are interface-oriented         

  哪我判斷下就好了,於是

CGFloat max = MAX(SCREEN_HEIGHT, SCREEN_WIDTH);
CGFloat min = MIN(SCREEN_HEIGHT, SCREEN_WIDTH);
 _player.view.frame = CGRectMake(0, 0, min, max);

 再次運行,好了,全屏可以了。恩,好像所有坑都填完了,表現不錯,今天中午給自己加個雞腿🍗 = =!。

 然后再細想,模擬器有時間也不靠譜,把土豪的腎6 Plus拿過來測一下(因為公司就我是ios7 ,不敢升級啊,升級了沒測試機了)

 在腎6+下面似乎也正常,但是........當我點擊右上角的分享按鈕的時候,為毛點不動

 難道把土豪的腎弄掛了???又試了5、5s、6結果全都一樣。但是在我手機上是正常的!又是iOS8的問題

有完沒完啊喂!何苦為難我一個小白!

  肯定是UIScreen的問題!於是乎開始找,然后發現了這個這個還有這個

  好吧,果然是之前的一個大坑,義無反顧的就跳進去了!大概意思就是ios7下無問題,ios8 UIScreen的bounds改變了,所有你點擊不到下半個屏幕了!

  試了半天,貌似無解,但是搜狐在iOS8下咋做的呢,然后在iOS8下下個搜狐,全屏。。。卧槽!和ios7一樣啊,點擊區域也沒問題啊!!

  看了半天,查了半天不是說在iOS8下只能

 [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];

  這么搞嘛,並且這樣搞轉過來statusbar莫名消失了。大搜狐就這么牛X?

  不甘心又看了下優酷,好吧,優酷一看就是強制全屏,后面的窗體也跟着轉了,連黑都沒黑掉,還能看到轉動動畫,你總是學習大企鵝,人家好賴還做個黑屏動畫。

  好吧,先寫到這里,明天繼續填坑,1個人獨立做一個項目果然坑啊,一個問題卡着后面全都沒辦法進行了!

 

  補充一下,剛剛想到搜狐估計還在支持iOS6,所有會不會用的是Xcode5和iOS7的SDK,這樣的話,理論上應該就沒問題了,在iOS8下依舊和iOS7一樣的。但是我本機的Xcode5被我刪了(論2個Xcode共存的必要性)然后這破網速根本就下不動安裝包,並且現在發布商店Xcode5不知道還能用不,等到下載下來在做補充吧

 

 

2月5日補充:

  歷盡千辛萬苦終於把Xcode5.1.1下載了,然后解決了N個報錯和沖突,親測使用iOS7的SDK編譯在iOS8上面無問題,半個屏幕不能點擊的問題也解決了,如果Xcode5.1.1能發包,按理來說應該可以了。但是在iOS7下面全屏時候下方會出現1像素的誤差,能看到后面視圖,在之前在iOS7上面出現過,使用iOS8SDK 無問題,初步判斷是iOS7的Bug!!!!

以為播放器用的三方,並且是用最古老的Authosizing ,估計是xib的問題,真心無力啊。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM