2017-10-19 11 views
1

私のアプリは、画面の大部分を占めるUIPageViewControllerのレイアウトと、下部にあるUITabBarのレイアウトを持っています。アニメーションが中断された場合、iOS - UIPageViewController didFinishAnimatingデリゲートメソッドが呼び出されない

ユーザーが左右にスワイプして同時にUITabBarをタップすると、基本的にUIPageViewControllerが遷移しているときに、別の画面に切り替えることによって遷移が中断されます。次のようになります。

  1. pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])代理人メソッドが呼び出されます。

  2. ただし、pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)デリゲートメソッドは呼び出されません。奇妙何

  3. は、ユーザーがUITabBarを使用してUIPageViewControllerにスイッチバックした後、viewDidAppearが現在画面上にレンダリングされものではありませんコンテンツのViewControllerで呼び出されていることです。上の例

、私は2つのタブを持って 私UITabBarからTab1Tab2。ユーザーはTab1に添付されたUIPageViewControllerVC1VC2の間でスワイプすることができ、Tab2にはVC3が付けられています。

ユーザーはTab1になり、画面にはUIPageViewControllerの中にVC1と表示されます。ユーザーがUIPageViewControllerVC1からVC2にスワイプし、同時にTab2をタップすると(これは本当にすばやく行う必要があります) pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])が呼び出されます。しかし、pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)は呼び出されません。

次に、ユーザーがTab1をタップしてUIPageViewControllerに戻ります。 viewDidAppearVC1で呼び出され、VC2は実際に画面に表示されます。

私はこれが端的なケースであり、潜在的にアップルのバグであると理解しています。以前に誰かがこれに遭遇したかどうか、そしてこれに対する回避策/解決策があるのか​​どうか疑問に思っていますか?

答えて

1

この問題が発生しました。

タブを変更すると移行中にViewControllerが変化します。その結果、コントロールはPageViewControllerから新しいViewControllerに移行します。 これは、デリゲートコールバックが停止する理由です。あなたが戻っPageViewControllerに切り替えると

あなたは、2つのうちのいずれか気づくかもしれません:

  • 初期ページがロードされます。これは、タブを切り替える前にページの半分以下をスワイプしたときに発生します。

  • 次のページ(最初のページの次のページ)が読み込まれます。これは、タブを切り替える前にページの半分以上をスワイプしたときに発生します。

これはまさにバグではなく、コントロールがココアで流れる方法です。

修正はありませんが、回避策があります。アニメーションが実行されている間にTabBarControllerとのやりとりを無効にし、終了後に有効にすることができます。

+0

これはまさに私が遭遇したことであり、回避策として 'UIPageViewController'以外のスクリーン上のすべての要素にディスエーブルロジックを適用しました。私がバグとして分類した理由は、2番目のページが画面上にレンダリングされているにもかかわらず、箇条書き2の場合です。 'ViewDidLoad'は秒の代わりに最初のページで呼び出されます。 – Shawn

+0

それは変です。私がスワイプを始めると、次のページのviewDidLoadが呼び出されます。私はページが最初に読み込まれてから提示される必要があると考えています。また、すべてのページが読み込まれると、そのページのviewDidLoadは決して再び呼び出されません。あなたのバグを再現できないようです。 – NSAdi

+0

私の間違い申し訳ありませんが、私はviewDidAppear – Shawn

関連する問題