こんばんわ。
いやいや、暑い。
今年はどのタイミングでクーラーの力を借りようか悩むところです

節電もしないとだめですし。
電気代値上げすんなよー。ヽ(`Д´)ノ

はい、今日はドラッグについてやってみます。

今のところはパネルをタッチして、もう一つパネルをタッチして、、、
という感じになっていますが、スムーズにパネル交換をするためには、
やっぱりドラッグでシュッっと交換したいですよね?。。。よね?

もちろん、今までの操作もできるようにしたままです。

ではPlayViewContorller.mに以下のようなコードを書いてみます。



- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (isFinished || state != PlayStateChoose) {
return;
}
if (!movingLayer1) {
return;
}

UITouch *aTouch = [touches anyObject];
CGPoint pos = [aTouch locationInView:self.view];
pos = [backView.layer convertPoint:pos toLayer:backView.layer.superlayer];

CALayer *layer = [backView.layer hitTest:pos];
if (movingLayer1 == layer || ![layer.name hasPrefix:@"panel"]) {
return;
}

// 2枚目のパネルの選択
if (movingLayer1) {
[movingLayer1 removeAnimationForKey:@"rotation"];
movingLayer2 = layer;
if (![self swapLayers]) {
movingLayer1 = nil;
movingLayer2 = nil;
}
}
}


このtouchesMoved:withEvent:っていうのは、いつ呼ばれるのかというと、
指が画面に触れた後、移動されると発生します。つまりドラッグですね。

これは、touchesBegan:withEvent:メソッドによくにてます

どこが違うのかというと、1枚目のパネルを選択するところの処理が無いだけで、あとはほぼ同じです。

これだけで、実装完了です!(*^ー^)ノ

なんででしょう。

想像してみてください。

①1枚目タッチ
   ↓
②ドラッグ(1枚目の枠の中を指が移動中)
   ↓
③ある瞬間となりのパネルの枠の中(2枚目)に入る!
// 2枚目のパネルの選択
のところにくる。→交換開始


①の1枚目タッチの時は、タッチイベントのメソッドが実行されます、
その後ドラッグ操作をすると、1枚目にタッチされたパネルがあるのは確かですよね。

②のドラッグ中はずっとこのtouchesMoved:withEvent:が何回も呼ばれますが、
交換する手前の条件分岐でうまい具合にreturnしてるのです。
パネル外を操作された時もreturnしてます。

なんとなくイメージできましたか??


では今日はこのへんで、失礼です(*v.v)。

応援よろしくお願いします!
にほんブログ村 IT技術ブログ iPhoneアプリ開発へ


にほんブログ村 携帯ブログ iPhoneへ