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]; } }