2

問題は、viewController2 が表示されている間 (約 0.2 秒かかります)、アプリ内のイベントによって viewController1 がポップされる可能性があることです。

それから私は得る:

DetailsViewController: 0x7e6191a0 の外観遷移の開始/終了の不均衡な呼び出し。

また、viewController2 は画面上で「孤立」したままになります (削除する方法はありません)。

コードは次のとおりです (Xamarin c# ではありますが、Objective C でも同じ問題です)。

this.PresentViewController(viewController2, animated: true, completionHandler: null); // takes 0.2s to animate
//
// then 0.1s later, say, this is called:
//
this.DismissViewController(animated: false, completionHandler: null);
this.NavigationController.PopToRootViewController(animated: false);

問題は、 this.DismissViewController がまだアニメーション化されている間、実際には viewController2 を閉じないことです。

(プッシュ アニメーションが進行中の場合、同様の問題が発生します)。

解決策は、PopToRootViewController のリクエストを「キューに入れ」、this.PresentViewController の completionHandler で実行することです。しかし、これは非常に面倒で、アプリ内のすべてのイベントをキューに入れる必要があり、すべてのアニメーションに completionHandler が必要です。

DismissViewController が機能し、PopToRootViewController を問題なく呼び出すことができるように、現在のアニメーションをキャンセルする方法が本当に必要です (this.View.Layer.RemoveAllAnimations() は presentViewController では機能しません)。

この「キャンセルできないアニメーション」の問題に人々はどのように対処していますか?

アップデート:

また、関連する問題があり、UIAlert の代わりに UIAlertController を使用する必要があります。背景については、以下を参照してください。

すでにアラートを表示している場合は、UIAlertController を表示します

UIAlertController を表示する前に、presentViewController アニメーションが完了するまで待機する必要があります。これは、アラートで表示したいプッシュ通知のようなものでは困難ですが、アニメーション中に到着する可能性があります。

4

0 に答える 0