你的應用程序有一個UIWindow
,其中包含你的根視圖控制器的視圖,其中包含按鈕:
你不明白的是,UIWindow
通過將旋轉變換應用到您的根目錄來旋轉用戶界面。看看視圖層次結構時,界面爲橫向左方向:
(lldb) po [[UIApp keyWindow] recursiveDescription]
(id) $1 = 0x0922ee80 <UIWindow: 0x942c280; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x942c380>>
| <UIView: 0x9432b30; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x9432be0>>
| | <UIRoundedRectButton: 0x942f7a0; frame = (476 352; 73 44); opaque = NO; layer = <CALayer: 0x942f8c0>>
| | | <UIGroupTableViewCellBackground: 0x94300b0; frame = (0 0; 73 44); userInteractionEnabled = NO; layer = <CALayer: 0x9430180>>
| | | <UIImageView: 0x9430af0; frame = (1 1; 71 43); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431340>>
| | | <UIButtonLabel: 0x94319c0; frame = (12 12; 49 19); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431d10>>
如何看UIWindow
的子視圖(UIView: 0x942c380
)已變換的[0, -1, 1, 0, 0, 0]
?該變換將您的頂層視圖逆時針旋轉90˚。如果你旋轉你的設備(或模擬器),以景觀正確的方向,你將看到轉變成爲[0, 1, -1, 0, 0, 0]
:
(lldb) po [[UIApp keyWindow] recursiveDescription]
(id) $2 = 0x07436d90 <UIWindow: 0x942c280; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x942c380>>
| <UIView: 0x9432b30; frame = (0 0; 748 1024); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x9432be0>>
| | <UIRoundedRectButton: 0x942f7a0; frame = (476 352; 73 44); opaque = NO; layer = <CALayer: 0x942f8c0>>
| | | <UIGroupTableViewCellBackground: 0x94300b0; frame = (0 0; 73 44); userInteractionEnabled = NO; layer = <CALayer: 0x9430180>>
| | | <UIImageView: 0x9430af0; frame = (1 1; 71 43); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431340>>
| | | <UIButtonLabel: 0x94319c0; frame = (12 12; 49 19); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9431d10>>
當您重置視圖的變換,你失去的旋轉,使視圖恢復到它的「默認」旋轉0˚,這是人像旋轉。
Adam Lockhart的答案會暫時解決這個問題,但如果用戶旋轉設備,UIWindow
會重置您的視圖的變換,失去了您所應用的翻譯。
正確的處理方法是而不是將您自己的轉換應用到您的頂級視圖。給你的頂層查看子視圖,你可以改變,並把你的按鈕,裏面是:
這是不正確的。應用於窗口的轉換不會撤銷其中的視圖和子視圖的任何轉換。它只會將變換應用於窗口。 –
@AdamLockhart我沒有談論將變換應用於窗口,而zanona的代碼也不會將變換應用於窗口。我談到了將變換應用到窗口的子視圖,這是zanona的代碼所做的。我測試了我的解決方案,並測試了你的解決方案如果界面旋轉到另一個方向,則您的翻譯會丟失。 –
你寫道:「UIWindow會重置你的視圖的變換,失去你應用的翻譯」。這是不合理的。我也測試過了。我有軟件,其中一切的定位依賴於應用轉換。如果這些轉換在用戶旋轉設備時丟失了,那將是荒謬的。 –