私はiPadアプリで画像を表示するためにズームUIScrollViewを使用しています。ズーミングは大きく働き、ピンチが適切な画像を小さくまたは大きくします。私はbouncesZoom
を有効にして、ユーザーがあまりにも遠くに伸ばした場合に最小または最大ズームに戻ってくるようにします。UIScrollViewズームバウンスをキャンセルするにはどうすればよいですか?
ピンチが最小ズームサイズよりも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%のズームしきい値を通過したとき
- が
–viewForZoomingInScrollView:
からnil
を返します。ジェスチャが開始されたときにこのメソッドが呼び出され、ズームのすべてのポイントでは呼び出されないため、機能しません。 - ズーム係数が90%未満の場合はを
-scrollViewDidZoom:
に設定し、ズーム率が90%未満の場合はtrueに設定します。bouncesZoom
が偽のときにサイズを許可しないため、スケールが90%以下になると画像がひどく揺れます。 -touchesEnded:withEvent
メソッドを追加する。それは決して呼ばれることはありません。- 私自身のUIPinchGestureRecognizerを追加して、UIScrollView自身のピンチレコグナイザと同時に実行します。 UIScrollViewのピンチジェスチャーの後に、ハンドラー(およびデリゲートメソッド)がと呼ばれているために動作しません。これは、ジェスチャーがそれを正しく伝える前にバウンスすることを決定します。私はすべてのコアジェスチャーを取り除き、私を追加し、コアジェスチャーを戻してみました。しかし、私の身振りは、UIScrollViewがバウンスしていたと判断したあとに、となり、まだと呼ばれていました。
だから私は少し損失があります。他の誰かがこれのようなことをしようとしましたか?
shrinkImageToNothingとは何ですか?cachedMinZoomScaleはどこに設定されていますか? – jjxtra