31

新しい Yahoo 天気アプリに見られるような効果を作ろうとしています。基本的に、 の各ページにはUIPageViewController背景画像があり、ページ ビューをスクロールすると、画像の位置は約半分の速度でしかスクロールしません。どうすればいいですか?UIPageViewController現在のオフセットを取得し、そのように画像を更新するために、何らかのデリゲート メソッドを使用できると考えました。唯一の問題は、とにかくUIPageViewControllerスクロールされているかどうかを確認できないことです! そのための方法はありますか?ありがとう!

4

8 に答える 8

51
for (UIView *view in self.pageViewController.view.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
         [(UIScrollView *)view setDelegate:self];
    }
} 

これにより、すべての標準スクロール ビュー API メソッドにアクセスできます。そして、これはプライベート Apple API を使用していません。

UIPageViewControllerの内部スクロール ビュー を 100% 見つけるために、サブビューのトラバースを追加しました警告: scrollview.contentOffsetには注意してください。コントローラーが新しいページにスクロールするとリセットされます

パーシジョンscrollviewオフセット トラッキングなどが必要な場合UICollectionViewControllerは、コレクション ビュー自体のサイズのセルを使用し、ページングを有効にすることをお勧めします。

于 2013-09-28T11:26:40.890 に答える
3

@Paul のスニペットを使用してください -

for (UIView *v in self.pageViewController.view.subviews) {
if ([v isKindOfClass:[UIScrollView class]]) {
    ((UIScrollView *)v).delegate = self;
}
}

このプロトコルを実装するには:-(void)scrollViewDidScroll:(UIScrollView *)scrollView

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint point = scrollView.contentOffset;

float percentComplete;
percentComplete = fabs(point.x - self.view.frame.size.width)/self.view.frame.size.width;
NSLog(@"percentComplete: %f", percentComplete);
}

これにより、スクロールの完了率が得られます。ハッピーコーディング!

于 2016-01-15T12:23:33.077 に答える
3

私の推測では、これはUIPageViewController ではなく、ページ化された UIScrollView です。UIScrollView、スクロールが行われるときに何が起こっているかを追跡する、常に繰り返されるデリゲート メソッドを提供します。

または、 UIPageViewController が密かに使用しているページ化された UIScrollView にアクセスできる可能性がありますが、何かを壊す可能性があり、Apple がそれについてどのように感じるかはわかりません。

于 2013-04-28T21:43:42.370 に答える
1

あなたが探しているのは視差スクロールと呼ばれ、それを支援するライブラリがいくつか見つかります。

編集:マットは正しいです。これは答えではなく、ヒントにすぎません。とにかく完成させましょう:

UIPageViewController の背後にある背景画像をアニメーション化するには、それが提供するデリゲート メソッドを使用する必要があります。

-[id<UIPageViewControllerDelegate> pageViewController:willTransitionToViewControllers:]
-[id<UIPageViewControllerDelegate> pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:]

これらの 2 つの方法を使用して、スクロールのパーセンテージを計算できます (コントローラーを配列に格納して、スクロールしたコントローラーを把握し、パーセンテージを取得する必要があります)。

于 2013-04-28T21:45:21.793 に答える