如何在UIPanGestureRecognizer中使用两个操作?

如何在UIPanGestureRecognizer中使用两个操作?

问题描述:

我正在处理两个子视图。每个将是独特的,并有它自己的“行动”。如何在UIPanGestureRecognizer中使用两个操作?

子视图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; 
      } 
     } 
    } 
} 

如果你想在两种不同的观点不同的手势识别,把单独识别每个视图。

+0

好的。我已经完成了,但我怎么只允许一个手势被称为?因此,如果我先将一个ImageView作为子视图添加,然后将bImageView添加为子视图,则仍会添加一个ImageView,并且它的手势处于活动状态。 –

通常,您希望让您的视图控制器拥有并管理手势识别器,例如,

- (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) { ... } 
}