2

私はiBookのようなページめくりトランジション(UIPageViewControllerTransitionStylePageCurl)を使用して、いくつかのUIViewControllerページをナビゲートしています。

したがって、UIPageViewControllerDataSourceデリゲート関数を実装しました

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerBeforeViewController:
(UIViewController *)viewController

これらは、ジェスチャーでページめくりを行うときに正しく呼び出されます。ここまでは順調ですね。

このデフォルトの動作に加えて、最後のページまたは最初のページにすばやく移動するためのショートカットとして、ページの両側に長押しジェスチャレコグナイザーを追加したいと思います。ジェスチャレコグナイザーをページに追加することはできましたが、組み込みのスワイプなしでページを移動する方法がわかりません。

プログラムで特定のページ(UIViewController)へのページめくりをトリガーするにはどうすればよいですか?

4

3 に答える 3

3

ユーザーがロングスワイプを実行すると、目的のviewController(この場合は最初または最後のページ)をメソッドのviewControllers引数に送信できます。

- (void) setViewControllers:(NSArray*)viewControllers
                  direction:(UIPageViewControllerNavigationDirection)direction
                   animated:(BOOL)animated
                 completion:(void (^)(BOOL finished))completion;

詳細については、Grahamの回答を参照してください。

UIPageViewControllerでプログラムでページをめくることができますか?

正しくお読みいただければ、表示されているUIViewControllerにはボタンが含まれており、この関数も呼び出せるようにしたいと考えています。

表示されているUIViewControllers内からプログラムでメソッドを呼び出すには、UIPageViewControllerを表示されているUIViewControllersのデリゲートにし、ボタンが押されたときにデリゲートメソッドを呼び出すことができます。

これを行うための悪い方法は、UIViewControllersにバックポインター(WEAKプロパティとして格納されます!)をUIPageViewControllerに送信し、その上でrespondsToSelector:を呼び出すことです。

于 2012-06-06T15:02:50.750 に答える
0

このUIPageViewController方法を見てください:

- (void)setViewControllers:(NSArray *)viewControllers 
                 direction:(UIPageViewControllerNavigationDirection)direction
                  animated:(BOOL)animated 
                completion:(void (^)(BOOL finished))completion;

UIPageViewControllerクラスリファレンス

于 2012-05-28T22:27:05.897 に答える
0

自分に設定していないことを確認してくださいself.pageViewController.datasourceUIPageViewController次に、この機能をジェスチャ認識機能と一緒に使用できます。

   -[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
  1. ジェスチャレコグナイザーのデリゲートを設定して、これを実装できます。

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    
  2. または、 UISwipeGestureRecognizerのようなジェスチャレコグナイザーを追加することもできます

于 2012-09-18T08:15:53.823 に答える