1

単一の uiscrollView に 4 つのページがあり、ページングが有効になっています。各ページの高さが異なる場合があります。scrollViewDidEndDeceleratingデリゲートでスクロールビューのコンテンツサイズを大きくしようとしましたが、役に立ちません。

各ページのスクロールビューのコンテンツサイズを異なる方法でインクリメントする方法を提案できますか?

前もって感謝します。

4

2 に答える 2

0

ネイティブにはできないと思います。ただし、ページングを無効にして手動で行うことができます。

そのための便利なデリゲート メソッドがあります。

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;

これにより、scrollView がスクロールを終了する場所を設定できます。

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    float offsetY = floorf((*targetContentOffset).y);
    float yGoto = 0.0;

    // Find out, based on that offsetY in which page you are
    // and set yGoto accordingly to the start of that page
    // In the following example my pages are 320px each

    // I start by only allowing to go 1 page at a time, so I limit
    // how far the offsetY can be from the current scrollView offset

    if(offsetY > scrollView.contentOffset.y + 160){
        // Trying to scroll to more than 1 page after
        offsetY = scrollView.contentOffset.y + 160;
    }
    if(offsetY < scrollView.contentOffset.y - 160){
        // Trying to scroll to more than 1 page before
        offsetY = scrollView.contentOffset.y - 160;
    }
    if(offsetY < 0){
        // Trying to scroll to less than the first element
        // This is related to the elastic effect
        offsetY = 0;
    }
    if(offsetY > scrollView.contentSize.height-320){
        // Trying to scroll to more than the last element
        // This is related to the elastic effect
        offsetY = scrollView.contentSize.height - 1;
    }

    // Lock it to offsets that are multiples of 320
    yGoto = floorf(offsetY);
    if((int)offsetY % 320 > 160){
        int dif = ((int)offsetY % 320);
        yGoto = offsetY + 320 - dif;
    }else{
        int dif = ((int)offsetY % 320);
        yGoto = offsetY - dif;
    }

    yGoto = floorf(yGoto); // I keep doing this to take out non integer part
    scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
    (*targetContentOffset) = CGPointMake(scrollView.contentOffset.x,yGoto);
}

それが役に立てば幸い!

于 2012-12-19T17:54:59.230 に答える
0

それは不可能です。コンテンツのサイズはスクロール ビューの境界であり、長方形です。ページごとにどのように変更できますか? ページを拡大縮小して同じサイズにし、ズームを使用しないのはなぜですか?

于 2012-12-19T17:22:09.483 に答える