0

UIScrollViewを使用して多くの画像を表示しています。メモリの問題のために、私は一度に3つの画像しかロードしません。ユーザーが次(または前)にフリックすると、2つの画像がシフトされ、新しい画像が読み込まれます。

まず、scrollViewDidEndDeceleratingメソッドを使用して、UIScrollViewが次のページ、前のページ、または現在のページに変更されるかどうかを判断します。ただし、すばやく連続してフリックすると、scrollViewDidEndDeceleratingメソッドはメッセージを受信しません。つまり、呼び出されませんが、scrollViewDidEndDragging:willDecelerateはメッセージを受信します。ドラッグが非常に速いため、前の減速は無視されます。

だから、ビューが変わるかどうか、そしてすばやくフリックしたときに変化を判断する方法をどこで知ることができるのだろうか?scrollViewDidEndDragging:willDecelerate methordまたは他の方法で?

4

3 に答える 3

7

私はこの方法に依存しませんscrollViewDidEndDeceleratingが、プロトコルを実装し scrollViewDidScroll、前/次のページの50%以上が表示されたときにページを更新します。

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

編集

スクロールビューと組み合わせたページコントロールは、このツタンカーメンでよく説明されています

于 2012-08-17T09:37:31.060 に答える
0
-(void) scrollViewDidScroll:(UIScrollView *)scrollViewl
{
  tempPageNO=PageNo;
  CGFloat pageWidth = scrollViewl.frame.size.width;
  int f=((scrollViewl.contentOffset.x-pageWidth/2)/pageWidth)+1;

  //----------newPageNo----------------
  PageNo=f;

  if (tempPageNO!=PageNo) {
    NSLog(@"it's true when page is changed.");
    NSLog(@"page NO %i",PageNo);
  }
}        
于 2012-08-17T09:53:09.977 に答える
0

tigueroの答えのSwift4バージョン。それが誰かを0.5分節約することを願っています。

let pageWidth = scrollView.bounds.size.width
let page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1
self.pageControl.currentPage = Int(page)
于 2018-06-22T18:36:19.280 に答える