5

ズームUIScrollViewを使用して、iPadアプリに画像を表示しています。ズームはうまく機能し、ピンチで画像を適切に小さくしたり大きくしたりします。またbouncesZoom、ユーザーがいずれかの方向に伸ばしすぎると、最小ズームまたは最大ズームに戻るように有効にしました。

ここで、最小ズームサイズよりも10%小さい画像でピンチが終了したことを認識し、そのような場合は、バウンスが発生しないようにして、画像を縮小して「閉じる」別のアニメーションをトリガーします。このように、一種の「ピンチして閉じる」ジェスチャがあります。これを行うために私が思いついたのは、最も単純なことですが、これは次のとおりです。

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    if (self.zoomBouncing && zoomedToScale / self.minimumZoomScale < 0.90) {
        // We've let go and were under 90% of the minimum size.
        self.minimumZoomScale = zoomedToScale;
        [self shrinkImageToNothing];
    } else {
        // How far have we gone?
        zoomedToScale = self.zoomScale;
    }
}

この時点ですでにバウンスしていることを除いて、これはうまく機能します。したがって、の設定minimumZoomScaleは何もしません。したがって、バウンスとシュリンクが同時に発生します。これは、ご想像のとおり、かなり奇妙に見えます。

だから私の質問は:この特定の状況でのみバウンスが発生するのを防ぐにはどうすればよいですか?ジェスチャが終了してからUIScrollViewが跳ね返ることを決定するまでの間に、コードが何かを実行できるようにするUIScrollViewDelegateメソッドはありません。私は運が悪かった他のたくさんのテクニックを試しました:

  • 90%ズームのしきい値を超えたときnilから戻ります。–viewForZoomingInScrollView:このメソッドは、ズームのすべてのポイントではなく、ジェスチャの開始時に呼び出されるため、機能しません。
  • ズーム率が90%未満の場合はfalseに設定bouncesZoom-scrollViewDidZoom:、90%以上の場合はtrueに設定します。スケールが90%を下回ると、画像の揺れがひどくなります。これは、bouncesZoomがfalseの場合にそのサイズが許可されないためです。
  • メソッドを追加し-touchesEnded:withEventます。呼び出されることはありません。
  • 独自のUIPinchGestureRecognizerを追加して、UIScrollView独自のピンチレコグナイザーと同時に実行します。UIScrollViewのピンチジェスチャの後にハンドラー(およびデリゲートメソッド)が呼び出されるため、機能しません。これにより、ジェスチャがバウンスする前にバウンスすることが決定されます。すべてのコアジェスチャを削除し、自分のジェスチャを追加して、コアジェスチャを追加し直してみました。しかし、 UIScrollViewがバウンスしていると判断した後も、私のジェスチャーは呼び出されまし

だから私は少し途方に暮れています。他の誰かがこのようなことをしようとしましたか?

4

3 に答える 3

8

このプロパティをNOに設定するだけです。(例:ViewDidLoad)

scrollView.bouncesZoom = NO;

于 2013-07-29T23:48:51.477 に答える
4

この質問を書くことは、私が解決策を見つけるための道を歩むのに役立ったと思います。そして幸いなことに、それは非常に簡単です!したがって、最初のステップでは、私が設定したコードで、 ivarも同じ値にminimumZoomScale設定します。cachedMinZoomScaleこれにより、スケールが最小値の90%未満のときにバウンスが発生しないようにすることは、実際には非常に簡単です。

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    if (self.zoomScale / cachedMinZoomScale < 0.90) {
        self.minimumZoomScale = self.zoomScale;
    } else {
        self.minimumZoomScale = cachedMinZoomScale;
    }
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
    if (self.zoomScale / cachedMinZoomScale < 0.90) {
        [self shrinkImageToNothing];
    }
}

基本的に、スクロールビューがズームするとき、-self.minimumZoomScale実際の最小値の90%未満の場合は現在のズームスケールのままにしますが、他のズームスケールでは実際の最小値に設定します。次に、ズームが終了したときに、その90%のしきい値を下回っている場合は、すでに最小サイズになっているため、何にもスナップバックしません。次に、新しいアニメーションを呼び出して縮小して閉じます。

単純。ふぅ!

于 2011-03-07T06:34:59.703 に答える
-2

これを試してください、[imageScrollview setBounces:NO];

于 2012-07-25T05:31:36.450 に答える