2011-01-26 92 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"); 
     } 
    } 
}