问题描述
如何强制取消 UIScrollView 上的缩放打开捏合手势,例如当用户足够"缩放到触发新操作时?
How do you forcibly cancel a zooming open pinch gesture on a UIScrollView, say when the user has zoomed "sufficiently" far to trigger a new action?
推荐答案
为了防止用户控制器缩放和平移但仍允许程序化缩放和平移滚动视图,最好的方法是覆盖 UIScrollView 的 -addGestureRecognizer:子类中的方法.
To prevent user-controller zooming and panning but still allow programmatic zooming and panning of a scrollview, the best approach is to override the UIScrollView's -addGestureRecognizer: method in a subclass.
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { //Prevent any of the default panning and zooming controls from working gestureRecognizer.enabled = NO; [super addGestureRecognizer:gestureRecognizer]; return; }
每个手势识别器都被禁用,为了更好地控制(例如,允许平移控制但只允许通过双击进行缩放),您只需通过 -isKindOfClass 检查传入的手势识别器: 并酌情禁用.
Each gesture recognizer is simply disabled, for finer control (for ex. allowing the pan control but only allow zooming via a double tap for instance) you'd simply check the incoming gesture recognizer via -isKindOfClass: and disabling as appropriate.
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { //Prevent zooming but not panning if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) { gestureRecognizer.enabled = NO; } [super addGestureRecognizer:gestureRecognizer]; return; }
希望这会有所帮助.