iPhoneでピンチジェスチャを実装するにはどうすればよいですか?私はiPhoneでのタッチイベントの使用に精通していますが、非常に怠惰であり、PINCHジェスチャのような広範なもののために車輪の再発明をしたくありません...ソースコードまたはそれへのリンクが役立ちます。
4 に答える
あなたはいくつかの基本的な数学を使用してそれを自分で実装する必要があります。
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
これらは、アプリケーションに実装する必要のあるデリゲートメソッドです。
2つのタッチ間の距離を取得してから、独自のコードで距離の変化を計算する必要があります。
距離を取得するために使用する数式は、内積と呼ばれます
引用されたチュートリアルで使用されている方程式が正しくないことを指摘したいと思います。チュートリアルで見逃されている絶対値を含めるように更新しました。
これはドット積です:
- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint
{
float xDist = fromPoint.x - toPoint.x;
float yDist = fromPoint.y - toPoint.y;
float result = sqrt( pow(xDist,2) + pow(yDist,2) );
return result;
}
編集: 私は以前の答えを間違えました....私がその種の数学のいずれかを行ってからしばらく経ちました。
結果を平方根にしないと、ポイント間の真の距離が得られません。これは、2つのベクトル間の大きさの計算と呼ばれます。
これはそれを行うための適切な方法です。平方根を省略したい場合は、2点間の正確な距離がわかりません。
答えを二乗しない場合、コードは機能しますが、実際の値よりもはるかに大きい測定値を使用します。したがって、将来、2つのポイント間の距離を取得する必要がある場合は、実際のピクセル距離である300pxではなく、90000のような値が返されます。
iOS 3.2 以降で新しい UIPinchGestureRecognizer クラスを使用することを支持して、ここで提示されたソリューションが廃止されたことはかなり確実です。
うーん……基本的な数学の使い方にすごく戸惑っている方もいるようです。内積はまったく無関係であり、問題を混乱させるだけです。2 つのベクトル間の dot prod は、それらの間の角度を計算するために使用されます。
実際には、ピタゴラスの定理を使用する必要があります。ドットは、ポイント間の距離を見つけることとは何の関係もありません-ピタゴラスだけです!
ピンチ ジェスチャの簡単なコード例を探している場合は、ここで説明するサンプル アプリケーション(そのページのアプリケーションの最後から 2 番目と最後のバージョン) で Brock によって説明されている方法を使用します。この例では、ピンチ ジェスチャを使用して、いくつかのコア アニメーション レイヤーをスケーリングしています。
距離の計算に関して彼が説明しているのは、単純に 2 点間に適用されるピタゴラスの定理 (X と Y の距離を直角三角形の 2 つの面として) だけです。