2011-03-07 17 views
5

私は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がバウンスしていたと判断したあとに、となり、まだと呼ばれていました。

だから私は少し損失があります。他の誰かがこれのようなことをしようとしましたか?

答えて

3

私はこの質問を書いて、解決策を見つける道を手伝ってくれたと思います。そして幸いにも、それは非常に簡単です!だから、最初のステップでは、私はminimumZoomScaleのセットを持っているコードで、私は同じ値にcachedMinZoomScale ivarを設定します。基本的には

- (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%未満であれば、それ以外のズームスケールでは実際の最小値に設定します。その後、ズームが終了すると、しきい値が90%を下回っていれば、すでに最小サイズになっているため何も戻ってこないので、新しいアニメーションを呼び出して閉じるようにします。

シンプルです。ピー!

+2

shrinkImageToNothingとは何ですか?cachedMinZoomScaleはどこに設定されていますか? – jjxtra

-2

お試しください。 [imageScrollview setBounces:NO];

+0

質問に記載されているように、他の理由で有効にしました。受け入れられた答えは、私が持っていた必要性を解決します。 – theory

7

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

scrollView.bouncesZoom = NO;

関連する問題