English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Androidでランタイムがスクリーン回転問題を解決する詳細な説明(推薦)

前語

iOSアプリケーション開発でよく screen rotation problem に直面することがあります。例えば、特定のページに異なるスクリーン回転を希望する場合がありますが、システムが提供するメソッドはナビゲーションコントローラーのグローバルメソッドであり、このようなニーズを自由に満たすことはできません。一般的な解決策はUINavrgationViewControllerを継承し、そのクラスの関連メソッドをオーバーライドすることですが、このオーバーライドプロセスでは少なくとも2つの余分なファイルと多くのコードが生成されます。これは私たちが望む解決策ではありません。以下では、より低レベルの方法を使用してこの問題を解決します。

基本原理

UINavrgationViewControllerのグローバルメソッドを動的に変更し、自分でオーバーライドしたsupportedInterfaceOrientations、shouldAutorotateメソッドとナビゲーションコントローラーオブジェクトのメソッドを置き換えることで解決します。

準備作業

プロジェクトのサポート方向の設定

コード実装

以下のメソッドをすべてのビューコントローラーの親クラスのviewDidLoadメソッドに書き込むことで、スクリーン回転方向の設定が完了します。

//現在のビューコントローラーの回転サポートメソッドを取得します。
Method selfMtihod = class_getInstanceMethod([self class], @selector(shouldAutorotate));
//現在のナビゲーションコントローラーの回転サポートメソッドを取得します。
Method navr = class_getInstanceMethod([self.navigationController class], @selector(shouldAutorotate));
//メソッドを交換
method_exchangeImplementations(selfMethod, navr);
//以下同様
Method selfOrientation = class_getInstanceMethod([self class], @selector(supportedInterfaceOrientations));
Method navrOrientation = class_getInstanceMethod([self.navigationController class], @selector(supportedInterfaceOrientations));
method_exchangeImplementations(selfOrientation, navrOrientation);

使用方法

上記の親クラスでsupportedInterfaceOrientations、shouldAutorotateをオーバーライドすることで、デフォルトのスクリーン回転関連の属性を指定します。

以降の各試みるコントローラーのサブクラスでは、supportedInterfaceOrientations、shouldAutorotateメソッドをオーバーライドすることで、指定されたビューコントローラーの方向の要件を満たすことができます。

以上は編集者が皆さんに紹介するRuntimeがスクリーン回転問題を解決する方法の詳細です。皆さんの助けになれば幸いです。何か疑問があれば、コメントを残してください。編集者はすぐに回答します。このサイトへのサポートに感謝します!

声明:この記事の内容はインターネットから取得され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしました。このサイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害を疑う内容があれば、メールを送信してください:notice#oldtoolbag.com(メールを送信する際、#を@に変更してください。侵害を報告する場合、関連する証拠を提供してください。一旦確認が取れたら、このサイトは即座に侵害を疑う内容を削除します。)

おすすめ