新しい Yahoo 天気アプリに見られるような効果を作ろうとしています。基本的に、 の各ページにはUIPageViewController
背景画像があり、ページ ビューをスクロールすると、画像の位置は約半分の速度でしかスクロールしません。どうすればいいですか?UIPageViewController
現在のオフセットを取得し、そのように画像を更新するために、何らかのデリゲート メソッドを使用できると考えました。唯一の問題は、とにかくUIPageViewController
スクロールされているかどうかを確認できないことです! そのための方法はありますか?ありがとう!
8 に答える
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
は、コレクション ビュー自体のサイズのセルを使用し、ページングを有効にすることをお勧めします。
@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);
}
これにより、スクロールの完了率が得られます。ハッピーコーディング!
私の推測では、これはUIPageViewController ではなく、ページ化された UIScrollView です。UIScrollViewは、スクロールが行われるときに何が起こっているかを追跡する、常に繰り返されるデリゲート メソッドを提供します。
または、 UIPageViewController が密かに使用しているページ化された UIScrollView にアクセスできる可能性がありますが、何かを壊す可能性があり、Apple がそれについてどのように感じるかはわかりません。
あなたが探しているのは視差スクロールと呼ばれ、それを支援するライブラリがいくつか見つかります。
編集:マットは正しいです。これは答えではなく、ヒントにすぎません。とにかく完成させましょう:
UIPageViewController の背後にある背景画像をアニメーション化するには、それが提供するデリゲート メソッドを使用する必要があります。
-[id<UIPageViewControllerDelegate> pageViewController:willTransitionToViewControllers:]
-[id<UIPageViewControllerDelegate> pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:]
これらの 2 つの方法を使用して、スクロールのパーセンテージを計算できます (コントローラーを配列に格納して、スクロールしたコントローラーを把握し、パーセンテージを取得する必要があります)。