问题描述
我正在 UIView 上绘制图形,该图形包含在 UIScrollView 中,以便用户可以水平滚动以查看整个图形.
I'm drawing a graph on a UIView, which is contained by a UIScrollView so that the user can scroll horizontally to look around the entire graph.
现在我想在用户用两根手指捏合时缩放图表,但我不想以相同的速率在 X 和 Y 方向上缩放视图,而是想通过更改 X 比例仅在 X 方向上缩放, 不改变 Y 比例.
Now I want to zoom the graph when a user pinches in with two fingers, but instead of zooming in a view with the same rate for X and Y direction, I want to zoom only in the X direction by changing the X scale, without changing the Y scale.
我想我必须抓住捏合/张开手势并重新绘制图形,覆盖默认的缩放行为.
I think I have to catch the pinch in/out gesture and redraw the graph, overriding the default zooming behavior.
但是有没有办法做到这一点?
But is there a way to do this?
我一直很难捕捉到 UIScrollView 上的捏合手势,因为它会在开始滚动时取消触摸.即使在 UIScrollView 取消触摸后,我也希望缩放工作.:(
I've been having a very difficult time to catch the pinch gesture on the UIScrollView, as it cancels the touches when it starts to scroll. I want the zooming to work even after the UIScrollView cancels the touches. :(
谢谢,库拉
推荐答案
虽然不能删除现有的捏合手势识别器,但可以禁用它,然后添加自己的:
Although you cannot delete the existing pinch gesture recognizer, you can disable it and then add your own:
// Disable existing recognizer for (UIGestureRecognizer* recognizer in [_scrollView gestureRecognizers]) { if ([recognizer isKindOfClass:[UIPinchGestureRecognizer class]]) { [recognizer setEnabled:NO]; } } // Add our own UIPinchGestureRecognizer* pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)]; [_scrollView addGestureRecognizer:pinchRecognizer]; [pinchRecognizer release];
然后在
- (void) pinch:(UIPinchGestureRecognizer*)recognizer { .. }
使用
[recognizer locationOfTouch:0 inView:..] [recognizer locationOfTouch:1 inView:..]
判断用户是水平捏还是竖捏.
to figure out if the user is pinching horizontally or vertically.