1

PDFページを表示するためのScrollViewがあります。スクロールすると、ScrollView でページングが有効になっている 2 番目のページが表示されます。スクロールのバウンス プロパティを false に設定しました。どのページが表示されているかというページ番号を表示したい。そのために、次のコードを使用していました..

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

if (scrollView == scrlView) {   
    if (lastContentOffsetX > scrollView.contentOffset.x) {

        if (currentPage > 1) {
            currentPage--;
            self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages];
        }
    }       
    else if (lastContentOffsetX < scrollView.contentOffset.x) {
        if (currentPage < totalPages) {
            currentPage++;
            self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages];
        }
    }
    lastContentOffsetX = scrollView.contentOffset.x;
}
}

ドラッグするたびにページが変わっても問題ありません。しばらくドラッグしても、ページが変わらず、同じままです。マイページ番号が増減します。

ScrollView がスクロールを停止したときにイベントを取得できるかどうかは、任意のボディでわかりますか?現在のオフセットを取得してタスクを完了することができます。

4

3 に答える 3

6

ユーザーがスクロールビューをドラッグするたびにページ番号を変更します-ドラッグが発生したという事実を使用して、ページが変更されたと想定するだけです-常にそうとは限りません。コードでは、コンテンツのオフセットとページ幅から現在のページを計算するだけです。この方法で、現在のページ番号 (0 ベース) を計算できます。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

   if (scrollView == scrlView) {   
       CGFloat xOffset = scrollView.contentOffset.x;
       int currentPage = floor(xOffset / scrollView.bounds.size.width);
       self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages];
   }
}

また、間違ったデリゲート メソッドを使用している可能性があります。scrollViewDidScroll:代わりにメソッドを使用します

PS 現在画面の半分以上を占めているページの番号を表示するには、コードを次のように変更します。

int currentPage = floor(xOffset / scrollView.bounds.size.width + 0.5);
于 2011-03-18T13:26:18.167 に答える
1

UIScrollView のデリゲート メソッドを使用できます。

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

ドキュメントUIScrollViewDelegate プロトコル リファレンスを参照してください。

于 2011-03-18T13:24:28.367 に答える
0

試す

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

および/または

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
于 2011-03-18T13:21:15.337 に答える