如何在 UIPanGestureRecognizer 中使用两个操作?
Posted
技术标签:
【中文标题】如何在 UIPanGestureRecognizer 中使用两个操作?【英文标题】:How do I use two actions in a UIPanGestureRecognizer? 【发布时间】:2012-11-19 03:34:10 【问题描述】:我正在使用两个子视图。每一个都是独一无二的,并且有自己的“行动”。
子视图 1 = 用户可以在视图周围拖动、旋转和缩放
子视图 2 = 当用户在屏幕上移动手指时,会在手指触摸的每个点添加一个图像。
我使用 UIPanGestureRecognizer 完成了这两项工作。我的问题是,我怎样才能将这两个动作分开?我希望能够添加一个子视图,执行所需的操作,然后当我添加另一个子视图时,防止之前的操作发生。
这是我尝试过的,这是在我的 panGesture 方法中完成的:
for (UIView * subview in imageView.subviews)
if ([subview isKindOfClass:[UIImageView class]])
if (subview == _aImageView)
CGPoint translation = [panRecognizer translationInView:self.view];
CGPoint imageViewPosition = _aImageView.center;
imageViewPosition.x += translation.x;
imageViewPosition.y += translation.y;
_aImageView.center = imageViewPosition;
[panRecognizer setTranslation:CGPointZero inView:self.view];
else if (subview == _bImageView)
currentTouch = [panRecognizer locationInView:self.view];
CGFloat distance = [self distanceFromPoint:currentTouch ToPoint:prev_touchPoint];
accumulatedDistance += distance;
CGFloat fixedDistance = 60;
if ([self distanceFromPoint:currentTouch ToPoint:prev_touchPoint] > fixedDistance)
[self addbImage];
prev_touchPoint = currentTouch;
【问题讨论】:
【参考方案1】:如果您想在两个不同的视图中进行不同的手势识别,请在每个视图上放置单独的识别器。
【讨论】:
好的。我已经完成了,但是我如何只允许调用一个手势?因此,如果我先将 aImageView 添加为子视图,然后将 bImageView 添加为子视图,仍然会添加 aImageView 并且它是手势活动的。【参考方案2】:通常,您希望视图控制器拥有并管理手势识别器,例如
- (void)viewDidLoad
self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
self.panGesture.delegate = self;
[self.viewX addGestureRecognizer:self.panGesture];
// repeat with other recognisers...
请注意,将控制器设置为 gestureRecognizer 的委托很重要:这使您能够处理来自视图控制器的以下委托方法(这是主要问题):
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
// handle your logic, which gestureRecognizer should proceed...
return NO;
处理程序方法与本例相同,但您可以根据需要设置自己的处理程序:
- (void)handleGesture:(UIGestureRecognizer*)gestureRecognizer
// handle gesture (usually sorted by state), e.g.
// if(gesture.state == UIGestureRecognizerStateEnded) ...
【讨论】:
以上是关于如何在 UIPanGestureRecognizer 中使用两个操作?的主要内容,如果未能解决你的问题,请参考以下文章