私は単純なiOSソリティアゲームを実装しています。このゲームでは、通常の方法でカードをドラッグすることができます。カードはUIView
サブクラスCardView
で表されます。すべてのカードビューはサブビューである兄弟で、SolitaireView
です。UIView bringSubviewToFront:表示しません。
-(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オーダーは、ドラッグ中に変更されません:次のスニペットは、それがドラッグされているとして、それは他のすべてのビューの上にあるように「前にカードを持って来る」しようとします。下の画像では、私は王をドラッグしています。私としてもlayer.zPosition
プロパティを変更しようとした
:それは左上の画像でナインを上に正しくあるが、右の画像に(実際には、スタック全体の下で)2の下に間違っているかに注目してくださいよく無駄に。 ドラッグ中にカードビューを前面に表示するにはどうすればよいですか?私は神秘的です。
私は 'bringSubviewToFrontがあることを発見:'設定するビューの「needsLayout」フラグをトリガします。私の 'layoutSubviews'メソッドは' bringSubviewToFront: 'も呼び出していたので、すべてのビューzオーダーを元の状態に戻しました! – wcochran
それでは、この解決策は何ですか?私も同じ種類の要件を持っています。カードのリストから、中位のカードのいずれかを選択すると、カードが出てきて正面に来るはずです。私のアニメーションはbringSubviewToFrontのために機能しません:メソッド – Mrunal
UIViewサブクラスを使用してスティックする場合、ドラッグするカードをマークして、layoutSubviewsを上に置く必要があります。私は実際に下記のようにCALayersを使用するように切り替えました。 – wcochran