Ios 无法使用UIPangestureRecograiser移动两个图像

Ios 无法使用UIPangestureRecograiser移动两个图像,ios,uipangesturerecognizer,Ios,Uipangesturerecognizer,我想用相同的UIPangestureRecognitor移动两个图像, 我可以移动第一个图像,但只要我尝试移动第二个图像,第一个图像就会回到其原始位置。我希望第一个图像在改变位置后保持不变 -(void) viewWillAppear:(BOOL)animated { UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleP

我想用相同的
UIPangestureRecognitor
移动两个图像, 我可以移动第一个图像,但只要我尝试移动第二个图像,第一个图像就会回到其原始位置。我希望第一个图像在改变位置后保持不变

-(void) viewWillAppear:(BOOL)animated
{
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self      action:@selector(handlePanSuper:)];
    [self.view addGestureRecognizer:pan];
}

- (void)handlePanSuper:(UIPanGestureRecognizer *)sender
    {
     static UIImageView *viewToMove;
     static CGPoint  originalCenter;

    if (sender.state == UIGestureRecognizerStateBegan)
    {
    CGPoint location = [sender locationInView:self.view];

    if (CGRectContainsPoint(self.imageView.frame, location))
    {
        viewToMove = imageView;
        originalCenter = viewToMove.center;
    }
    else if (CGRectContainsPoint(self.image2.frame, location))
    {
        viewToMove = image2;
        originalCenter = viewToMove.center;
    }
    else
    {
        viewToMove = nil;
    }

    if (viewToMove)
    {

        viewToMove.alpha = 0.8;
        [viewToMove.superview bringSubviewToFront:viewToMove];
        NSLog(@"hi i am being touched.");
     }
 }
 if (sender.state == UIGestureRecognizerStateChanged && viewToMove != nil)
    {
    CGPoint translation = [sender translationInView:self.view];
    viewToMove.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y +                                        translation.y);


}
else if ((sender.state == UIGestureRecognizerStateEnded ||
          sender.state == UIGestureRecognizerStateFailed ||
          sender.state == UIGestureRecognizerStateCancelled) && viewToMove != nil)
{
    // do whatever post dragging you want, e.g.
    // snap the piece into place

       // CGPoint center = viewToMove.center;
        //viewToMove.center = center;

        viewToMove.alpha  = 1.0;

        viewToMove = nil;
  }
}

您正在superView中设置手势识别器。为什么?您可以将其设置在您试图移动的视图中,这样更容易且不太可能出现奇怪的行为我编辑了您的代码,请参见下文(未测试)


请试试这个,如果有用请告诉我。

如果你尝试了什么,请给出一些反馈嘿,伙计,我把这行[sender setTranslation:CGPointMake(0,0)inView:self.view],但是第一个图像现在移动了一点,然后回到原始位置,即第一个图像根本不移动。是否存在一个限制,即只有一个图像可以与一个UIPangestureRecognitor功能关联?不,识别器不应该存在任何问题或限制。我按答案编辑,请尝试上面的代码
-(void) viewWillAppear:(BOOL)animated
{
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self      action:@selector(handlePanSuper:)];
    self.imageView.userInteractionEnabled = self.image2.userInteractionEnabled = YES;
    [self.imageView addGestureRecognizer:pan];
    [self.image2 addGestureRecognizer:pan];
}

- (void)handlePanSuper:(UIPanGestureRecognizer *)sender
{
    UIImageView *viewToMove = (UIImageView*)sender.view;
    CGPoint  originalCenter = viewToMove.center;

    if (sender.state == UIGestureRecognizerStateBegan)
    {
        CGPoint location = [sender locationInView:self.view];

        viewToMove.alpha = 0.8;
        [viewToMove.superview bringSubviewToFront:viewToMove];
        NSLog(@"hi i am being touched.");

    }
    else if (sender.state == UIGestureRecognizerStateChanged)
    {
        CGPoint translation = [sender translationInView:self.view];
        viewToMove.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y +                                        translation.y);

    }
    else if ((sender.state == UIGestureRecognizerStateEnded ||
          sender.state == UIGestureRecognizerStateFailed ||
          sender.state == UIGestureRecognizerStateCancelled))
    {
    // do whatever post dragging you want, e.g.
    // snap the piece into place

       // CGPoint center = viewToMove.center;
        //viewToMove.center = center;

        viewToMove.alpha  = 1.0;
        viewToMove = nil;
    }
}