0

したがって、サイズを変更する必要がある ScrollView 内に imageView を取得しました

私がしたことは、 UIScrollViewDelegate を設定し、scrollViewDidScrollメソッドを使用してスクロールオフセットに基づいて画像のサイズを変更することです

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    CGFloat scrollViewOffset = aScrollView.contentOffset.y;

    if(scrollViewOffset < 0.0f) {
        // postition top
        CGRect imageViewRect = self.imageView.frame;
        imageViewRect.origin.y = scrollViewOffset;

        if(scrollViewOffset < 0.0f && scrollViewOffset >= -50.0f) {
            CGFloat newBackdropHeight = kImageHeight - scrollViewOffset;
            imageViewRect.size.height = newBackdropHeight;
        }

        self.imageView.frame = imageViewRect;
    }
}

ここで基本的に何が起こっているかというと、ユーザーが上にいるときに上にスクロールしている場合 (バウンスが有効になっている場合)、imageView は一定量のオフセット (ここでは 60px) までスクロールで拡大します。

これに関する問題は、非常に速くスクロールすると、画像のサイズ変更が停止しますが、スクロールビューの残りの部分は通常のように速くスクロールすることです。次に、スクロールビューが元に戻ると、画像がすぐに拡大されてから、本来のように縮小されます (こちらのビデオを参照してください: https://dl.dropbox.com/u/80699/scroll2.m4v )。

この動作では、ユーザーエクスペリエンスはあまり良くなく、ユーザーはジャンプするイメージを見ます.

これを修正する方法を知っている人はいますか?

自分で動作を確認したい場合は、ここに小さなサンプル プロジェクトがあります: https://dl.dropbox.com/u/80699/scroll.zip

ご協力いただきありがとうございます!不明な点がある場合は、コメントを残してください

4

1 に答える 1

1

テスト プロジェクトをざっと見てみましたが、問題は、すばやくスクロールすると、コールバックが呼び出されるまでに Y オフセットが -50 を超えているため、画像ビューのサイズが変更されていないことだと思います。

内部if条件を削除し、背景に最大の高さを与えることでこれを解決しました。

if(scrollViewOffset < 0.0f) {
    // postition top
    CGRect imageViewRect = self.imageView.frame;
    imageViewRect.origin.y = scrollViewOffset;

    CGFloat newBackdropHeight = kImageHeight - MAX(scrollViewOffset,-50.0);
    imageViewRect.size.height = newBackdropHeight;

    self.imageView.frame = imageViewRect;
}

それが役立つことを願っています

于 2012-06-08T13:47:51.147 に答える