如何强制取消UIScrollView
上的缩放开放捏动手势,例如当用户“足够”缩放以触发新动作时?
答案 0 :(得分:4)
要防止用户控制器缩放和平移但仍允许滚动视图的编程缩放和平移,最好的方法是覆盖子类中的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;
}
希望这有帮助。
答案 1 :(得分:2)
这是怎么回事:
-(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:)
即可。这将产生一种“一次性”捏合处理程序,当它达到上限或下限时停止。
答案 2 :(得分:1)
我发现的强力解决方案是删除并重新添加接收触摸的视图,因为只要用户不结束手势,我的(子)scrollview只是没有结束对缩放的反应。
在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];
}
}