最近在做視頻類的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:
哪我判斷下就好了,于是
CGFloat max = MAX(SCREEN_HEIGHT, SCREEN_WIDTH);CGFloat min = MIN(SCREEN_HEIGHT, SCREEN_WIDTH); _player.view.frame = CGRectMake(0, 0, min, max);
再次運行,好了,全屏可以了。恩,好像所有坑都填完了,表現不錯,今天中午給自己加個雞腿
新聞熱點
疑難解答