ios鍵盤橫屏 iOS強制轉換橫豎屏和鍵盤方向控制

2021-10-12 14:48:03 字數 2516 閱讀 4753

前言

在開發中,有時候我們回到這樣一種需求:從乙個豎屏介面跳轉到下乙個橫屏介面,或者反之。如果是安卓的話,就很簡單,安卓系統提供這樣的api,直接操作即可。但是ios就不好辦了,在ios3.0之前,系統還有乙個介面用來設定應用螢幕方向setorientation:,但是ios3.0之後就被禁止了,成為了私有方法(也不知道蘋果怎麼想的)。

本文針對這個問題展開討論,並提供解決方案,以及此方案帶來的坑和填坑方案(最重要的乙個就是鍵盤彈出方向問題)。

唯一解決辦法

ios中不能直接設定介面方向,那就只能對檢視進行手動旋轉了,view.transform。

例如view需要順時針旋轉90度:

view.transform = cgaffinetransformmakerotation(m_pi_2);

狀態列也要跟著旋轉

如果狀態列沒有隱藏的話,那麼狀態列也要旋轉一下,不旋轉的話產品是不會放過你的

所以這段**和上面的**一般是同時出現的。

鍵盤彈出方向是個頭疼的問題

不同的應用,介面結構也不盡相同,純原生開發也有可能多個window疊層。如果是在cocos2d上開發的遊戲應用,那就會再麻煩點。首先說明幾個注意點,大家靈活運用。運用不好,就會出現如圖現象:

ios應用中,決定鍵盤的方向因素在不同ios版本中是不一樣的。

ios7中,鍵盤方向是根據狀態列方向決定的。

ios9中,鍵盤方向由最後一層window決定,這裡有點複雜,因為ios9新增了乙個uiremotekeyboardwindow。那麼應用可能就有3個window,依次是uiwindow,uitexteffectswindow,uiremotekeyboardwindow。uiremotekeyboardwindow成為決定鍵盤方向的window了,而uitexteffectswindow控制了鍵盤頂部欄的方向,如下如:

ios10中,和ios9類似,但是,如果要強制旋轉鍵盤的話,它的座標計算方法又和之前的系統有區別。區別在於計算window的原點座標(x,y),ios10是(0,0,width,height),ios9的x和y需要這樣計算:cgfloat keyboardwindowxy = (viewsize.height - viewsize.width) / 2;

在這種橫豎屏頻繁切換的應用中,很容易出現上圖中所示的情況,或者在橫屏介面中鍵盤縱向彈出。那麼這個時候就需要手動旋轉控制鍵盤方向的window啦。

鍵盤強制旋轉

如果是純原生開發,只需要旋轉決定鍵盤方向的window,設定bounds,設定center。旋轉**如下:

if(windowcount < 2) {

return;

if(windowcount == 3)//ios9以上,uiremotekeyboardwindow

keyboardwindow.bounds =cgrectmake(0, 0, [[uiscreen mainscreen] bounds].size.width, [[uiscreen mainscreen] bounds].size.height);

keyboardwindow.center = cgpointmake([[uiscreen mainscreen] bounds].size.width*0.5f,[[uiscreen mainscreen] bounds].size.height*0.5f);

keyboardwindow.transform = cgaffinetransformmakerotation(0);

keyboardwindow.bounds =cgrectmake(0, 0, [[uiscreen mainscreen] bounds].size.width, [[uiscreen mainscreen] bounds].size.height);

keyboardwindow.center = cgpointmake([[uiscreen mainscreen] bounds].size.width*0.5f,[[uiscreen mainscreen] bounds].size.height*0.5f);

keyboardwindow.transform = cgaffinetransformmakerotation(0);

經過以上操作,螢幕旋轉和鍵盤旋轉基本上就可以得到解決了。

但是我參與的專案還不止這麼簡單,它是基於cocos2dx的應用,還會跳轉原生頁面,橫屏遊戲介面跳入豎屏原生介面。這個時候得改一些cocos2dx的**,去強制扭轉鍵盤,座標計算和各種情況的判斷,還是挺複雜的,本文就不再做詳細介紹,因為別的專案涉及到的概率非常小。

以上討論僅供參考,希望對您有所幫助。

另一種鍵盤旋轉方法

[[uidevice currentdevice] setvalue:[nsnumber numberwithinteger:uideviceorientationlandscapeleft] forkey:@"orientation"];

在ios8以上的系統中,鍵盤卻隨著裝置方向彈出了。換言之,即使inte***ce orientation為landscape,但device orientation為portrait,鍵盤就會以portrait的方向彈出。但是setvalue是個私有方法

iOS強制橫屏

在網上查了很多資料均不能獲取自己想要的效果,最後整理了別人的思路,方法,再花了一天的工作量填坑,成功實現了想要的功能和效果,嗯,完美!原因就是坑少囉!廢話太多直接進入正題!第一步 uiinte ceorientationmask uiwindow window中新增以下 nsuserdefaults...

iOS中強制轉某個頁面為橫屏,鍵盤也橫屏

我專案中全部是豎屏,但是有那麼幾個是橫屏,也有幾個是橫屏中要輸入一些資訊,然後就要使得鍵盤也是橫屏。1 設定專案的device landscape中的資訊,要勾選這麼幾項,如下 2 設定強制橫屏 在viewdidload方法裡面新增如下 void viewdidload val uiinte ceo...

iOS 強制轉成橫屏的方式

手裡的專案需要在豎屏的情況下有個別頁面進行橫屏強制切換,困擾了一天終於找到解決的辦法。辦法由如下兩個 1 手動改變view.transform屬性 簡明的說就是旋轉你的view,將view旋轉後強迫使用者進行橫屏操作 self.view.frame cgrectmake 0,0,uiscreen m...