刷新其他UIView时禁用一个UIView上的用户交互

时间:2016-10-03 20:42:53

标签: ios objective-c uiview uiswipegesturerecognizer

在开始之前,我理解yourView.userInteractionEnabled = NO;是一个选项,但让我先解释一下情况。

我有两个UIView个对象,stoneOnestoneTwo。我有4个UISwipeGestureRecognizer个对象,分别为上,下,左,右。想象一下,在5x5网格周围滑动这些“石头”。

我不想要的是能够同时滑动两者。

目前,该bug仍然存在问题。我将向您展示一个名为swipeLeft:的方法,它代表所有滑动方向的布局。

    - (IBAction)swipeLeft:(UISwipeGestureRecognizer *)recognizer {
        _oldMove1 = _move1;
        _oldMove2 = _move2;
        if (recognizer.view == _oneStone
               && recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
            _twoStone.userInteractionEnabled = NO;
            _oneStone = recognizer.view;
            [self moveOne:CGPointMake(-1, 0) withView:_oneStone];
            self.move1++;
            // 'causeADelay:' runs _twoStone.userInteractionEnabled = YES;
            [self performSelector:@selector(causeADelay:) withObject:_twoStone afterDelay:1];
        } else if (recognizer.view == _twoStone
               && recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
            _oneStone.userInteractionEnabled = NO;
            _twoStone = recognizer.view;
            [self moveTwo:CGPointMake(-1, 0) withView:_twoStone];
            self.move2++;
            [self performSelector:@selector(causeADelay:) withObject:_oneStone afterDelay:1];
        }
        self.moveCount++;

}

我尝试过的其中一件事就是在我可以与UIView个对象进行交互时产生延迟。这只有在我等待半分钟才能进行互动的情况下才有效。完全延迟会发生,一切都会奏效。

我的错误是当你同时滑动它们时。那是因为附在他们身上的滑动手势吗?

我还尝试删除并重新应用对象作为子视图......显然不起作用。我真的需要这个工作,否则我有一个死胡同的游戏。我刚开始时对编码很新,从未考虑过Cocos2d或其他游戏驱动的开发平台,所以我所有的东西都来自于即时思考。

1 个答案:

答案 0 :(得分:1)

有几种解决方案,但这里特别容易:

从石头中移除滑动手势识别器,然后将它们附加到石头的常见超视图中。这解决了这个问题,因为同一视图上只有一个手势识别器 可以在任何时候识别。

当然,您现在必须使用命中测试来找出正在刷的石头(如果有的话)。但这是一个简单的实施细节,而且支付的价格很低。

当然,另一个很酷的功能是你现在只需要四个手势识别器!