UIScrollView并取消缩放缩放手势

如何强行取消UIScrollView上的缩放打开捏手势,比方说当用户放大到足够远以触发新的动作时?

为了防止用户控制器缩放和平移,但仍允许编程缩放和平移scrollview,最好的方法是覆盖子类中的UIScrollView's addGestureRecognizer方法。

 -(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { //Prevent any of the default panning and zooming controls from working gestureRecognizer.enabled = NO; [super addGestureRecognizer:gestureRecognizer]; return; } 

每个手势识别器都是简单的禁用,为了更好的控制(例如,允许平移控制,但只允许通过双击来缩放),您只需通过-isKindOfClass:来检查传入的手势识别器,并根据需要禁用。

 -(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { //Prevent zooming but not panning if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) { gestureRecognizer.enabled = NO; } [super addGestureRecognizer:gestureRecognizer]; return; } 

希望这可以帮助。

这个怎么样:

 -(void)handlePinchGesture:(UIPinchGestureRecognizer *)sender { if (![sender isEnabled]) { [sender setEnabled:YES]; } if (sender.state == UIGestureRecognizerStateChanged) { if (sender.scale > 2.0) { NSLog(@"Upper bound reached"); [sender setEnabled:NO]; } else if (sender.scale < 0.75) { NSLog(@"Lower bound reached"); [sender setEnabled:NO]; } } } 

只要用手势识别selector(handlePinchGesture:)注册这个selector(handlePinchGesture:) 。 这将形成一种“一次性”的夹点处理器,当它达到上限或下限时停止。

我发现一个暴力解决scheme是删除并重新添加接收触摸视图,因为我的(子)滚动视图只是没有结束反应,只要用户不会结束手势。

在ScrollViews中,如果您在用户滚动浏览大容量内容时删除/添加子视图,通常会这样做,所以甚至不需要编写额外的代码。

 - (void)scrollViewDidZoom:(UIScrollView *)scrollView { if (scrollView.zoomScale < 0.65) { // some actions [self myactionstodo]; // force cancel zoom gesture by usual reload (remove and re-add subviews) [self reloadSV:currentpage]; } }