iOS開發 詳解強制螢幕旋轉的方法
第一步:
首先,我定義了一個變數isFullScreen,用於判斷當前檢視是處於橫屏狀態還是豎屏狀態。YES為橫屏,NO為豎屏。
BOOL _isFullScreen
第二步:
我寫了一個方法用於執行轉屏的操作,不論是橫屏,還是豎屏操作都可以呼叫這個方法,裡面會根據當前的狀態,判斷是該橫屏還是豎屏!
- (void)changeScreenAction{
SEL selector=NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation =[NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = _isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait;
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
解析:
- 找到setOrientation:方法對應的SEL型別的資料,我用了一個區域性變數selector暫存起來
SEL selector=NSSelectorFromString(@"setOrientation:");
2.NSInvocation 是實現命令模式的一種,可以調取任意的SEL或block。當NSInvocation被呼叫,它會在執行時,通過目標物件去尋找對應的方法,從而確保唯一性。
NSInvocation建立方法
+ (NSInvocation *)invocationWithMethodSignature:(NSMethodSignature *)sig;
NSMethodSignature是一個方法簽名的類,通常使用下面的方法,獲取對應方法的簽名
[訊息接受者 instanceMethodSignatureForSelector:selector];
eg:
NSInvocation *invocation =[NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
3.設定方法:
[invocation setSelector:selector];
4.設定執行方法的物件
[invocation setTarget:[UIDevice currentDevice]];
5.判斷當前的狀態是橫屏還是豎屏。利用三目運算子,得到UIInterfaceOrientationLandscapeRight(橫屏)或UIInterfaceOrientationPortrait(豎屏),得到的結果其實是一個列舉,如下:
typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
UIInterfaceOrientationUnknown = UIDeviceOrientationUnknown,
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
}
對應的程式碼如下:
int val = _isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait;
6.設定執行方法的引數
- (void)setArgument:(void *)argumentLocation atIndex:(NSInteger)idx;
argumentLocation傳遞的是引數的地址。index 從2開始,因為0 和 1 分別為 target 和 selector。
7.呼叫這個方法
[invocation invoke];
相關文章
- iOS螢幕旋轉解決方案iOS
- ubuntu螢幕旋轉Ubuntu
- orientationchange 螢幕旋轉事件事件
- ios一句程式碼搞定螢幕旋轉iOS
- Android 禁止螢幕旋轉Android
- mui 控制旋轉螢幕方向UI
- IBM筆記本螢幕旋轉解決IBM筆記
- iOS螢幕旋轉之Apple Document(蘋果文件翻譯)iOSAPP蘋果
- 判斷螢幕旋轉的事件程式碼事件
- iOS螢幕截圖的方法iOS
- iOS感測器:實現一個隨螢幕旋轉的圖片iOS
- 瞭解Android核心元件活動生命週期————旋轉螢幕Android元件
- iOS 疑難雜症 — — UITableView 新增 tableFooterView 旋轉螢幕後收不到點選事件!!!...iOSUIView事件
- js判斷螢幕是否旋轉程式碼例項JS
- 360奇酷手機自動旋轉螢幕怎麼關閉 360奇酷手機自動旋轉螢幕關閉教程
- Swift橫豎屏切換、自動旋轉螢幕、手動旋轉螢幕、鎖定當前螢幕禁止轉屏、橫豎屏頁面跳轉過度、橫豎屏UI適配SwiftUI
- Win10系統下怎麼禁止螢幕旋轉Win10
- android螢幕適配詳解Android
- 樂1s自動旋轉螢幕怎麼關閉 樂視超級手機1s自動旋轉螢幕關閉教程
- iOS10螢幕卡頓耗電快怎麼辦 iOS10升級螢幕卡頓耗電快解決方法iOS
- 螢幕旋轉的適配問題以及遇到的一些坑
- (轉)【iOS 開發】二進位制、十進位制、十六進位制相互轉換的方法iOS
- 筆記本螢幕更換的詳細方法筆記
- 【iOS開發】iOS 動畫詳解iOS動畫
- 【iOS開發】強制修改iOS狀態列顏色iOS
- win10平板不能自動旋轉螢幕如何解決Win10
- iOS中的螢幕導航iOS
- SAP螢幕增強示例
- 螢幕顯示機制
- 電腦螢幕旋轉90度怎麼復原win10 win10螢幕翻轉了怎麼辦Win10
- “炫動”你的螢幕——移動產品中的旋轉木馬模式模式
- 開啟Win10組合鍵解鎖螢幕方法Win10
- 取消win10開始螢幕的方法 如何取消win10系統開始螢幕Win10
- UI篇-關於單個頁面螢幕旋轉要注意的問題UI
- iOS 各種螢幕尺寸iOS
- Mac蓋上螢幕後外接螢幕持續黑畫面的解決方法Mac
- 如何將 MacBook 的外接螢幕設定為主螢幕的方法Mac
- win10增強亮度的方法_Win10螢幕亮度怎麼加強Win10