まずtouchesなんたらについて
touchesBeganで現在何本の指がタッチされているのかは取得出来ません。
取得出来るのはtouchesMovedだけです。
取得の仕方は以下
int i=0;
int divx,divy;
CGPoint nowTouchPoint[20], PrevTouchPoint[20];
for(UITouch *touch in [event allTouches])
{
PrevTouchPoint[i] = [touch previousLocationInView:self];
nowTouchPoint[i] = [touch locationInView:self];
i++;
}
どのくらい動いたのかは以下のようにすると取れる
divx = (nowTouchPoint[0].x - PrevTouchPoint[0].x);
divy = (nowTouchPoint[0].y - PrevTouchPoint[0].y);
CALayerの位置をdivx,divy分だけ移動すれば指で移動が出来る。
ピンチ処理をしたい場合は、
1.PrevTouchPointとnowTouchPointの比から、
拡大縮小率を計算し、それに合わせてCALayerのframeを変更する
2.PrevTouchPointから中間点を計算し、
その座標をCALayer座標系に変換してからCALayerのanchorに設定する
3.2の中間点(画面上の座標)へCALayer を setPosition する。
このとき、画面の上下左右に入るように
CALayerのsetPosition 位置を修正する必要がある。
という事をやると、指でタッチした位置の中間点を中心にして拡大縮小が出来る。
もちろんスクロールとかにCALayerを乗せれば自前なんてやる必要ないんだけど、
どうしても自前実装しなければならない時にご参考ください。
0 件のコメント:
コメントを投稿