想象一个粉红色的方块,与绿色方块部分重叠。用户拖动粉红色方块。如果它们拖得足够远以至于它不再与绿色方块重叠,则绿色方块移动到堆栈的顶部。如果他们再将粉红色的方块拖回去,它现在将处于绿色方块之下。
这是代码。
-(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;
}
}
但它没有按预期工作。绿色视图一旦显示在前面,粉红色视图(仍然被拖动)会跳回到其起始位置。就像更改子视图层次结构一样会破坏手势识别器。
我做了大量的摆弄和记录,试图找出正在发生的事情。为了测试我关于手势中断的理论,我尝试了不同的东西:我没有将绿色视图移到顶部,而是添加了一个新的子视图。结果相同。添加新的子视图使被拖动的对象跳回到其起始位置。
任何线索?