在将两个UIImageViews拖入彼此之后,如何禁用它们?

时间:2013-05-31 01:04:21

标签: objective-c uiimageview

我在UIView中有两个可拖动的UIImageViews。当我将一个UIImageView拖到另一个上时,我想禁用那两个UIImageViews的触摸事件,并创建另一个响应我的触摸事件的UIImageView。我尝试过使用setUserInteractionEnabled:但它根本不做任何事情。请原谅我,如果这不是一个脑子,但我是编程新手,这是我到目前为止所做的。请给我一些关于我的代码的反馈,并给我一些建设性的批评,因为我觉得好像我说错了。

-(void)swapImageViews
{
  if ((self.imgView1.center.x == self.imgView2.center.x) &&
      (self.imgView1.center.y == self.imgView2.center.y)) {

      [self addSubview:self.imgView3];
      self.imgView3.center = CGPointMake(self.imgView1.center.x, self.imgView1.center.y);
      [self.imgView1 removeFromSuperView];
      [self.imgView2 removeFromSuperView];
      [self.imgView1 setUserInteractionEnabled:NO];
      [self.imgView2 setUserInteractionEnabled:NO];
    }
}

所以再一次,我们的目标是用一个新的图像视图换掉两个图像视图,我也可以拖动它。

我遇到的问题是我的触摸事件仍在前三个图像视图后面移动。

2 个答案:

答案 0 :(得分:0)

你说第三张图片出现了,但其他两张图片仍然在视图中,他们仍然会收到触摸事件。有两种情况:

  1. 您已经在其他地方添加了第三个图片视图,并且永远不会调用您的方法,或者从未满足条件。
  2. self.imgView1self.imgView2未设置为视图堆栈中的实际对象。他们可能只是零。您可以在该方法中NSLog(@"%@ %@", self.imgView1, self.imgView2);之前,条件之前或viewWillAppearviewDidLoad进行调试。
  3. 支持我观点的原因:

    1. 在该方法中,您将removeFromSuperview调用到要禁用的两个图像视图,但它们仍然可见并接收触摸事件。这意味着不执行此方法。这意味着它们是nil或其他一些与可见对象不同的对象。
    2. 方法开头的条件有点严格。很难轻易满足。然而,当第三图像视图被添加到视图时,执行该方法。当对象为nil时会发生这种情况,因此方法返回的值是默认值。
    3. 同时检查this link "the 10th item"this one

答案 1 :(得分:0)

这不是最好的方法,但是使用您提供给我们的代码,我们没有很多选项,您可以做类似的事情,删除手势:

  -(void)swapImageViews{
    if ((self.imgView1.center.x == self.imgView2.center.x) &&
        (self.imgView1.center.y == self.imgView2.center.y)) {

        [self addSubview:self.imgView3];
        self.imgView3.center = CGPointMake(self.imgView1.center.x, self.imgView1.center.y);
        [self.imgView1 removeFromSuperView];
        [self.imgView2 removeFromSuperView];
        NSArray* gestures1 = [self.imgView1.gestureRecognizers copy];
        for(UIGestureRecognizer *gesture in gestures1){
            [self.imgView1 removeGestureRecognizer:gesture];
        }
        NSArray* gestures2 = [self.imgView2.gestureRecognizers copy];
        for(UIGestureRecognizer *gesture in gestures2){
            [self.imgView2 removeGestureRecognizer:gesture];
        }
    }
}