2011-01-26 11 views
4

UIScrollViewは、ズームの最小限度を超えてピンチズームアウトされ、アニメーション表示されようとしているときに通知を受けようとしていますが、 delegateメソッドだけでこれを行う方法はありますか?UIScrollView'sタッチ操作をオーバーライドする必要がありますか?UIScrollViewはピンチズームの終了を検出します

答えて

2

UIScrollViewのscrollViewDidZoomデリゲートメソッドを使用して、アニメーションを再生しようとしている瞬間を検出できます。表示が狭められている間に、がscrollView.minimumZoomScale以下になると表示されます。その後、ユーザーが指を離すと、すぐにscrollView.zoomScale == scrollView.minimumZoomScalescrollViewDidZoomが呼び出されますが、scrollView.zooming == NOとなります。

この瞬間をキャプチャしても大丈夫ですが、バウンスバックのminimumZoomScaleアニメーションを先取りするために何かをしようとすると、本当に奇妙な副作用があるようです。 :(

+0

minimumZoomScale以外のzoomScale、 'if!scrollView.zooming && scrollView.zoomScale <0.6 {何かをする}' – osrl

0
私は UIPinchGestureRecognizerでそれをやった

-(void)viewDidLoad{ 
    UIPinchGestureRecognizer *gestureRecognizer = 
    [[[UIPinchGestureRecognizer alloc] initWithTarget:self 
               action:@selector(pinched:)] 
                   autorelease]; 
    gestureRecognizer.delegate=self; 
    [self.scrollView addGestureRecognizer:gestureRecognizer]; 
    //your code 
} 
-(void)pinched:(UIPinchGestureRecognizer*)gestureRecognizer{ 
    if(gestureRecognizer.state==UIGestureRecognizerStateEnded){ 
     //pinch ended 
     NSLog(@"scale: %f",scrollView.zoomScale); 
    } 
} 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
     shouldRecognizeSimultaneouslyWithGestureRecognizer: 
          (UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 
8

使用scrollViewDidZoom:scrollView.zoomBouncing == YESが。そして、ビューがバウンスされている方向を決定するためにzoomScaleを使用するかどうかを確認します。私はキャプチャしたい場合は

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
    if (scrollView.zoomBouncing) { 
     if (scrollView.zoomScale == scrollView.maximumZoomScale) { 
      NSLog(@"Bouncing back from maximum zoom"); 
     } 
     else 
     if (scrollView.zoomScale == scrollView.minimumZoomScale) { 
      NSLog(@"Bouncing back from minimum zoom"); 
     } 
    } 
} 
関連する問題