iOS橫豎屏切換的一些坑(持續更新),ios切換
最近在做視頻類的App,遇到視頻滾動播放的坑,緊接著就是橫豎屏問題。之前太過天真不想做橫豎屏配置。只是想旋轉視頻View,但是分享什麼的包括AlertView還是豎屏樣式,項目著急上線(1周提交一次也是夠了。。。人家審核都煩了估計)也就一直沒改。昨天開始改才發現是一個深坑!
因為首頁是滾動播放,不想做橫屏適配,座標判斷什麼的還要改來改去,看了下目前主流App,搜狐做的貌似是最好的。具體效果
(傻傻的我結了半天才截到,我竟然不知道相機有一個功能叫做慢動作)
他們橫屏轉動的時候後面的tableView不動的,當初就是看了一眼就天真的以為只是轉動個view,其實還是豎屏。。。但是
緊接著就是網路判斷啥的,忽然才發現我根本就拉不出來這個面板啊 = =!只能豎著拉有木有
拉出來之後直接豎屏了有木有!!!
所以想到了他們應該是改變介面方向。然後就想,後面tableview不動,那我就手動改介面方向然後轉視頻View唄。
在ios8以前,手動調用
UIApplication *application=[UIApplication sharedApplication];[application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
應該可以選擇介面方向,關於介面方向和裝置方向,詳見一片楓葉大神的《旋轉螢幕筆記》
但是在My Code中調用之後沒反應,後來尋找資料發現在我的基類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);
再次運行,好了,全屏可以了。恩,好像所有坑都填完了,表現不錯,今天中午給自己加個雞腿