私はアプリケーションの分割ビューをサポートするマルチタスクを採用しています。しかし、私は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. textFieldShouldBeginEditingが呼び出され、textFieldDidBeginEditingが呼び出されない
- 2. サービスが呼び出され、時にはサービスが呼び出されない場合があります
- 3. tryToPerform:と:KeyDownイベントが時に呼び出されていない:
- 4. 実行時に呼び出されない印刷メソッドは、デバッグ時に呼び出されます
- 5. traitCollectionDidChangeが呼び出されたときにもう一度失敗しています
- 6. ボタンクリック時にAndroid OnClickListnerが呼び出されない
- 7. UITableViewDataSourceプロトコルの実装時にtitleForHeaderInSectionが呼び出されない
- 8. 戻る時にngOnInitが呼び出されない
- 9. Javaスクリプトのメソッドページロード時にメソッドが呼び出されない
- 10. App Appの購入時にSKPaymentTransactionStateRestoredが呼び出されない
- 11. loadMoreRowsがロード時に呼び出されない
- 12. 印刷時に__str__メソッドが呼び出されない
- 13. オフライン時にFirebase onDataChangeが呼び出されない
- 14. FormClosedイベントがメインフォーム終了時に呼び出されない
- 15. wxPython:パネル更新時にonPaintイベントが呼び出されない
- 16. PassportJsのGoogle認証時にカスタムコールバックが呼び出されない
- 17. PHPコンストラクタがインスタンス化時に呼び出されない
- 18. prepareForSegueがピック時に呼び出されない
- 19. JSONの解析時にデータオブジェクトコンストラクタが呼び出されない
- 20. ストリーム終了時にコールバックスパイが呼び出されない
- 21. キャンセル操作時にNSOperation deallocが呼び出されない
- 22. Spring-MVC:要求時にコントローラメソッドが呼び出されない
- 23. componentコンポーネントのマウント時にcomponentDidMount()が呼び出されない
- 24. サブビュー時にTapGestureRecogniserが呼び出されない
- 25. 予定時刻にタイマーが呼び出されない
- 26. onReceiveが呼び出されないときに呼び出される
- 27. 即時デリゲート機能が呼び出されていない
- 28. applicationDidBecomeActiveは古いデバイス(非マルチタスク)で呼び出されますか(YES/NO)?
- 29. AJAX呼び出しが呼び出されない
- 30. Internet Explorer 11 - AJAX呼び出しが呼び出されない
はい、試しました。それは働いている。しかし、私は変更が終わったときに通知を出したい。とりあえずありがとう。 – RayChen
このチェックをUIDevice.currentDevice()。orientation.isLandscape.boolValueに追加しましたか?これはあなたに現在の向きの状態を与えます。コードを例で更新しました。 –
いいえ、私はそれを確認していない – RayChen