我正在实现一个简单的iOS纸牌游戏,允许用户以通常的方式拖动卡牌。卡牌用UIView子类CardView表示。所有卡牌视图都是SolitaireView的子视图,它们是兄弟视图。下面这段代码片段尝试将一张卡牌“置于前面”,使其在被拖动时位于所有其他视图之上:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view.tag == CARD_TAG) {
CardView *cardView = (CardView*) touch.view;
...
[self bringSubviewToFront:cardView];
...
}
}
不幸的是,在拖动过程中,卡牌的z-order保持不变。在下面的图片中,我正在拖动King。请注意,它在左侧图像中正确地位于Nine之上,但在右侧图像中错误地位于Two之下(实际上是整个堆栈之下):
我还尝试了修改layer.zPosition
属性,但无济于事。如何在拖动过程中将卡牌视图带到最前面?我感到困惑。
bringSubviewToFront:
会触发视图的 'needsLayout' 标志被设置。我的layoutSubviews
方法也调用了bringSubviewToFront:
,因此将所有视图的 z-order 恢复到它们的初始状态! - wcochran