更改视图的z-index会破坏手势识别器

时间:2014-01-03 14:57:15

标签: objective-c

想象一个粉红色的方块,与绿色方块部分重叠。用户拖动粉红色方块。如果它们拖得足够远以至于它不再与绿色方块重叠,则绿色方块移动到堆栈的顶部。如果他们再将粉红色的方块拖回去,它现在将处于绿色方块之下。

这是代码。

-(void)dragView:(UIPanGestureRecognizer *)recognizer {
    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

    if (!CGRectIntersectsRect(backView.frame, frontView.frame) && !self.performedFlip) {
        UIView *backView = recognizer.view.tag == 1 ? self.greenView : self.pinkView;
        [self.view bringSubviewToFront:backView];
        self.performedFlip = YES;
    }
}

但它没有按预期工作。绿色视图一旦显示在前面,粉红色视图(仍然被拖动)会跳回到其起始位置。就像更改子视图层次结构一样会破坏手势识别器。

我做了大量的摆弄和记录,试图找出正在发生的事情。为了测试我关于手势中断的理论,我尝试了不同的东西:我没有将绿色视图移到顶部,而是添加了一个新的子视图。结果相同。添加新的子视图使被拖动的对象跳回到其起始位置。

任何线索?

0 个答案:

没有答案