ズーム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がバウンスしていると判断した後も、私のジェスチャーは呼び出されました。
だから私は少し途方に暮れています。他の誰かがこのようなことをしようとしましたか?