1

複数のテーブルを含む UIScrollView と、ユーザーが現在表示しているページを追跡する UIPageControl があります。テーブルビューを上にスクロールし始めるまでは正常に動作し、その時点で UIPageControl が調整され、(誤って) 最初のページにいると表示されます。

これが私のコードです:

- (void)scrollViewDidScroll:(UIScrollView *)_scrollView {
  if (pageControlIsChangingPage) {
    return;
  }

  /*
   *  We switch page at 50% across
   */
  CGFloat pageWidth = _scrollView.frame.size.width;
  int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
  pageControl.currentPage = page;
}

そしてこれも:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView {
  pageControlIsChangingPage = NO;
}

これが発生する原因が正確にはわかりません。. . 何か案は?私は困惑しました:(

4

2 に答える 2

2

問題は、UITableView と UIScrollView の両方がデリゲートを self に設定していたため、同じ scrollview メソッドを呼び出していたことだと思います。メインのスクロールビューにタグを追加し、ページを調整するときにタグのチェックを実行することでそれを説明しました。

if (_scrollView.tag == 100) {

CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;

}

最後に

于 2012-05-04T23:22:26.563 に答える
0

ページをスクロールすると、正しくスクロールしますか?

if (pageControlIsChangingPage)
  return;

ページを変更しない場合 (つまり、テーブルビューをスクロールする場合) はreturn実行されないようです。など

CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;

部分は実行されますが、この時点では、上下にスクロールするだけなので、_scrollView.contentOffset.xより少なくなりpageWidth / 2ます (可能性もあります)。その結果、結果はになります。0page1

于 2012-05-04T03:39:37.510 に答える