UIScrollView并取消缩放缩放手势
答
为了防止用户控制器缩放和平移,但仍然允许编程缩放和平移滚动视图,最好的方法是覆盖子类中的:方法。
-(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:)
与手势识别。这会形成一种“一次性”的夹点处理程序,当它达到上限或下限时停止。
答
我发现的一个蛮力解决方案是删除并重新添加接收触摸的视图,因为只要用户不会结束手势,我的(子)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];
}
}
实际上,这会永久禁用该手势。这些问题表明了以编程方式切换手势的能力。没有? – dugla 2013-01-23 23:42:00
我们可以通过[pageScrollView removeGestureRecognizer:pageScrollView.pinchGestureRecognizer]来做到这一点; ,那么为什么要继承? – Xeieshan 2014-06-22 18:56:49