0

我在 UIView 中有两个可拖动的 UIImageView。当我将一个 UIImageView 拖到另一个上时,我想禁用这两个 UIImageView 的触摸事件并创建另一个 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];
    }
}

所以再一次,目标是将两个图像视图换成一个我也可以拖动的新视图。

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

4

2 回答 2

0

你说第三张图片出现了,但另外两张还在视图中,它们仍然接收到触摸事件。有两种情况:

  1. 您已经在其他地方添加了第三个图像视图,并且您的方法永远不会被调用,或者条件永远不会满足。
  2. self.imgView1并且self.imgView2未设置为视图堆栈中的实际对象。他们可能只是零。您可以通过NSLog(@"%@ %@", self.imgView1, self.imgView2);在该方法中、在条件之前或在viewWillAppearor中进行调试viewDidLoad

支持我观点的理由:

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

检查此链接“第 10 项”链接。

于 2013-05-31T01:59:20.377 回答
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];
        }
    }
}
于 2013-05-31T03:02:14.617 回答