私は、ソリティア ゲームによく似た最初のアプリを作成しています。ユーザーはカードを移動し、それらを互いに積み重ねる必要があります。今、私はObjective-Cに非常に慣れていないので、私の質問が愚かであることを許してください.
だから私は物事を試していて、それらに2つUIImageViews
付いUIPanGestureRecgonizer
ています。そのため、ユーザーがカードの 1 つをドラッグするときはいつでも、もう一方のカードの上にある必要があります。ViewController.m ファイルで以下のコードを使用していますが、問題は、1 つのカードをドラッグしてから別のカードをドラッグすると、最初のカードが元の位置にスナップバックすることですが、どこにでもとどまりたいです。引きずりました。BringSubviewToFront をコメントアウトすると、これは発生しませんが、カードの 1 つは常に他のカードの後ろに残ります。
-(IBAction)dragCard:(UIPanGestureRecognizer *)recognizer {
UIView *cardView = [(UIPanGestureRecognizer *)recognizer view];
[self.view bringSubviewToFront:cardView];
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.view];}
何が原因なのかわかりません。手伝ってくれませんか...
編集:何が起こっているかを示すために self.view.subviews をログに記録しました。タグ 1 の画像をドラッグし、タグ 2 の画像のドラッグを開始します。両方の座標が変化することがわかります。タグ 1 の画像は元の位置に戻り、タグ 2 の画像も移動します。
2013-05-16 17:02:20.424 (
"<UIImageView: 0x71749e0; frame = (0 0; 320 411); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x7174a40>>",
"<UIImageView: 0x7172ef0; frame = (25 77; 42 58); autoresize = TM+BM; tag = 1; gestureRecognizers = <NSArray: 0x7171700>; layer = <CALayer: 0x7171620>>",
"<UIImageView: 0x71722f0; frame = (88 200; 42 58); autoresize = TM+BM; tag = 2; gestureRecognizers = <NSArray: 0x7171bc0>; layer = <CALayer: 0x7172350>>"
2013-05-16 17:02:20.441 (
"<UIImageView: 0x71749e0; frame = (0 0; 320 411); autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x7174a40>>",
"<UIImageView: 0x7172ef0; frame = (30 177; 42 58); autoresize = TM+BM; tag = 1; gestureRecognizers = <NSArray: 0x7171700>; layer = <CALayer: 0x7171620>>",
"<UIImageView: 0x71722f0; frame = (91 201; 42 58); autoresize = TM+BM; tag = 2; gestureRecognizers = <NSArray: 0x7171bc0>; layer = <CALayer: 0x7172350>>"
最初の ImageView は私の背景画像です。