2011-01-26 66 views
4

我試圖通知UIScrollView縮小超出其最小縮放限制,即將動畫回來時,但我發現它非常困難。有沒有辦法單獨使用delegate方法,或者是否需要覆蓋UIScrollView's觸摸處理?UIScrollView檢測捏縮放結束

回答

2

您可以使用UIScrollView的scrollViewDidZoom委託方法來檢測它即將動畫回來的時刻。當視圖被捏住時,您會看到scrollView.zoomScale降至scrollView.minimumZoomScale以下。然後,一旦用戶釋放他們的手指,scrollViewDidZoom將再次被呼叫scrollView.zoomScale == scrollView.minimumZoomScale,但scrollView.zooming == NO

抓住這一刻是沒有問題的,但是試圖做任何事情來搶佔反彈到最小的縮放比例動畫對我來說似乎有非常奇怪的副作用。 :(

+0

如果我想捕捉除了minimumZoomScale之外的zoomScale,比如`if!scrollView.zooming && scrollView.zoomScale <0.6 {做點什麼} – osrl 2014-12-24 22:59:26

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"); 
     } 
    } 
}