1

XcodeのUIPageControllerテンプレートを使用して、インタラクティブな本を作成してきました。

このアプリでは、ページが読み込まれるとすぐに、すべてのページで異なるオーディオファイルが再生されます。

ページの隅の1つをタップすると、うまく機能します(最初のページからの音声が停止し、2番目のページからの音声が開始され、目に見える重なりはありません)。

この問題は、指をスワイプしてページをドラッグすると発生します。iBooksの場合と同じように、トランジションの途中でページを保持して両方のページを表示できますが、その場合、両方のページの音声が重なってしまいます。

最適には、最初のページの音声はトランジションが開始するとすぐに停止し、2番目のページのオーディオはトランジションが終了すると(ページのカールが画面の最後に到達すると)開始するようにしますが、どちらか一方がこれらだけで良い結果が得られます。

重ならないように[audioFromPagestop]や[audioFromPageplay]を追加する場所が見つからないのです。

これらの行をsetViewControllers:direction:animated:completion:メソッドだけでなく、 viewControllerAfterViewControllerメソッドとviewControllerBeforeViewControllerメソッドにも追加しようとしましたが、どれも機能しませんでした。

この問題を解決する方法について何か考えがありますか?

4

2 に答える 2

6

私のアプリの1つでも同様の状況が発生しました。

ページめくり(いずれかの方向)が成功した後にのみオーディオを開始するには、UIPageViewControllerDelegateのクラスに追加できるオプションのメソッドがあります。

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed;

このメソッドが呼び出されるたびに、現在[pageViewController.viewControllers objectAtIndex:0]のメッセージを送信してサウンドの再生を開始できます(一度に単一のページを表示しているように見えるため、NSArrayviewControllersには常に単一の要素があります)

同様に、メッセージに同様[previousViewcontrollers objectAtIndex:0]のメッセージを送信して、サウンドの再生を停止することもできます。

これにより、要求したように、ページめくりの最初ではなく、ページめくりの完了時にサウンドが1つのページから次のページに切り替わりますが、類似の方法はありません。pageViewcontroller didBeginAnimating:

これを行う最も安全な方法は、audioFromPageのstopメソッドとstartメソッドを含むプロトコルを定義してから、すべてのviewController(本の「ページ」)にこのプロトコルを実装させることです。そうすることで、コンパイラーは、これらのメソッドを実装していないページを誤って作成することを防ぎ、実行時のクラッシュを回避します。

于 2011-11-22T20:30:19.633 に答える
1

ページ遷移を開始および終了するには、次の2つの方法があります。

-(void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed

于 2012-11-06T09:17:27.940 に答える