私はアプリケーションの分割ビューをサポートするマルチタスクを採用しています。しかし、私はtraitCollectionDidChangeは、アプリケーションが右側にあるときに呼び出されないことがわかります。誰もがこれについてアイデアを持っていますか?マルチタスク時にtraitCollectionDidChangeが呼び出されない
答えて
viewWillTransitionToSizeメソッドを試しましたか?これは、ビューのサイズが変更されようとしていることをコンテナに通知するために使用されます。
のObjective-C UITraitEnvironmentの文書を1として
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
スウィフト
func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animateAlongsideTransition(nil, completion: {
if UIDevice.currentDevice().orientation.isLandscape.boolValue {
print("landscape")
} else {
print("portrait")
}
}
:
IOSのインタフェース環境の変化システムがこのメソッドを呼び出します。このような変更に対応するために、アプリケーションのニーズに応じてビューコントローラとビューにこのメソッドを実装します。たとえば、iPhoneを縦向きから横向きに回転させたときに、View Controllerのサブビューのレイアウトを調整することができます。このメソッドのデフォルト実装は空です。 実装の冒頭で、superを呼び出して、ビュー階層の上位にあるインタフェース要素がレイアウトを最初に調整できるようにします。
ViewController
にtraitCollectionDidChange
を上書きすることができます。
ただし、
traitCollectionDidChange
スプリットビューモードからスプリットビューモードに変更するときに呼び出されます。例えば、50/50ビューから33/66へ。それでNOTがマルチタスクモードに入ったり終了したりするときに呼び出されます。
あなたの代わりにviewWillTransitionToSize:withTransitionCoordinator:
を使用し、入ってくるなど、マルチタスクモードを終了すべてのイベントを処理する必要がある場合:
// put this in your ViewController code
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// TODO: put your code here (runs BEFORE transition complete)
}
をあなたのコードは、遷移compelete AFTER を呼び出したい場合:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// TODO: put your code here (runs AFTER transition complete)
}];
}
これを読んだ人のヒント。 'traitCollectionDidChange'は、あなたが「50/50ビューから33/66に」と言ったような分割モードを変更したときには必ずしも呼び出されるとは限りません。実際のサイズクラスが変更された場合にのみ呼び出されます。例えば。両方のモードでサイズクラスがコンパクトになるため、iPad proではなくiPadアプリがあり、アプリが右から表示されている場合、traitCollectionDidChangeは呼び出されません。 –
このコメントありがとう!アップル社だけが(ビューサイズの変更を扱う)シンプルなものを作ることができますので、複雑で不明瞭です! –
traitCollectionDidChangeはiPadマルチタスクのためにうまく動作します。 – malhal
それでも誰かがその点を疑っている場合:
// This method called every time user changes separator position or when user rotates device
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
// Always call super in those methods
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Before this call your layout is old, status bar orientation will return value before rotation
[coordinator animateAlongsideTransition:^(id <UIViewControllerTransitionCoordinatorContext> context) {
// Code here will be executed during transform. Status bar orientation is new, your view size already changed (in general).
// Setup required animations or custom views transitions
}
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// Split view transition complete or device rotated
}];
}
また、メソッドtraitCollectionDidChange:
がありますが、実際に水平サイズクラスが変更された場合にのみ呼び出されます。たとえば、スプリットビューモードで右側から提示しているアプリの場合、ユーザーがセパレータの位置を変更したときにtraitCollectionDidChange:
は呼び出されません。あなたのアプリは左から提示場合しかし、それはポートレートモードで常に呼び出され、ビューコントローラの遷移(50/50) <-> (66/33)
ための風景の中に、私たちは、とき向きが/通知を受けるために
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
を呼び出す必要がありますマルチウィンドウビューの変更。
- 1. tryToPerform:と:KeyDownイベントが時に呼び出されていない:
- 2. 実行時に呼び出されない印刷メソッドは、デバッグ時に呼び出されます
- 3. UITableViewDataSourceプロトコルの実装時にtitleForHeaderInSectionが呼び出されない
- 4. App Appの購入時にSKPaymentTransactionStateRestoredが呼び出されない
- 5. componentコンポーネントのマウント時にcomponentDidMount()が呼び出されない
- 6. Spring-MVC:要求時にコントローラメソッドが呼び出されない
- 7. PHPコンストラクタがインスタンス化時に呼び出されない
- 8. キャンセル操作時にNSOperation deallocが呼び出されない
- 9. ボタンクリック時にAndroid OnClickListnerが呼び出されない
- 10. onReceiveが呼び出されないときに呼び出される
- 11. AJAX呼び出しが呼び出されない
- 12. fbDidLoginが呼び出されず、handleURLが呼び出されない
- 13. IntentServiceが時々呼び出されない
- 14. ジャージーテスト - ExceptionMapperが呼び出されない
- 15. デリゲートメソッドが呼び出されない
- 16. Subversionポストコミットが呼び出されない
- 17. ApplyClientBehaviorが呼び出されない
- 18. カスタムロールプロバイダが呼び出されない
- 19. willSendRequestForAuthenticationChallengeが呼び出されない
- 20. CABasicAnimation - animationDidStopが呼び出されない
- 21. WW_MOUSE_LLフックが呼び出されない
- 22. NSURLConnection - didFailWithErrorが呼び出されない
- 23. dylibデストラクタが呼び出されない
- 24. Netfilerフックが呼び出されない
- 25. サーブレットが呼び出されない
- 26. WillTerminateイベントが呼び出されない
- 27. CellForRowAtIndexメソッドが呼び出されない
- 28. InvokeCommandActionが呼び出されない
- 29. ロケール:onConfigurationChangedが呼び出されない
- 30. get_context_dataが呼び出されない
はい、試しました。それは働いている。しかし、私は変更が終わったときに通知を出したい。とりあえずありがとう。 – RayChen
このチェックをUIDevice.currentDevice()。orientation.isLandscape.boolValueに追加しましたか?これはあなたに現在の向きの状態を与えます。コードを例で更新しました。 –
いいえ、私はそれを確認していない – RayChen