iPhoneで、指タッチを使用して中心点を中心に画像を回転させる方法を実装するには?
ホイールと同じように、iPhone の画面に指を置いて急に動かすと、画像がホイールと同じように中心点を中心に回転し、しばらくするとどんどん遅くなり、最後に停止します。
いくつかのコード (Object-C) またはいくつかの提案を提供できるのは誰ですか?
昨日、「ボトルを回す」アプリで作業していました。ウィンドウには、タッチに応答し、ユーザーが指をスワイプする方法で回転すると思われるボトルを備えた ImageView があります。タッチイベント (TouchesBegan、Touchesoved、TouchesEnd) 中に ImageView を回転させるのに苦労しました。TouchesMoved でこのコードを使用して、魔女の角度を見つけて画像を回転させました。
public override void TouchesMoved (NSSet touches, UIEvent evt)
{
PointF pt = (touches.AnyObject as UITouch).LocationInView(this);
float x = pt.X - this.Center.X;
float y = pt.Y - this.Center.Y;
double ang = Math.Atan2(x,y);
// yada yada, rotate image using this.Transform
}
これは重要!ImageView が回転すると、x 座標と y 座標も変化します。そのため、常に同じ領域に触れると、pt と prePt ポイントで異なる値が得られます。考え、グーグルで調べ、読んだ後、私は問題に対する簡単な解決策を思いつきました。ImageView の「SuperView」プロパティ。
PointF pt = (touches.AnyObject as UITouch).LocationInView(this.SuperView);
その小さな変更により、非常に簡単になりました。UITouch-methods LocationInView と PreviousLocationInView を使用して、正しい x & y 座標を取得することはできません。彼女は私のコードの一部です。
float deltaAngle;
public override void TouchesMoved (NSSet touches, UIEvent evt)
{
PointF pt = (touches.AnyObject as UITouch).LocationInView(this.Superview);
float x = pt.X - this.Center.X;
float y = pt.Y - this.Center.Y;
float ang = float.Parse(Math.Atan2(dx,dy).ToString());
//do the rotation
if (deltaAngle == 0.0) {
deltaAngle = ang;
}
else
{
float angleDif = deltaAngle - ang;
this.Transform = CGAffineTransform.MakeRotation(angleDif);
}
}
誰かがボトルをおかしく回転させる方法を理解するのに何時間も費やすのを助けてくれたことを願っています! :)
私はアフィン変換を使用します-yuouは、transformプロパティを使用して任意のレイヤーまたはUI要素に変換を割り当てることができます。
CGAffineTransform CGAffineTransformMakeRotation( CGFloat angle)
要素を回転させる変換を返すを使用して、回転変換を作成できます。デフォルトの回転は、中心点を中心に行う必要があります。
回転は360度に制限されていることに注意してください。したがって、それ以上の回転(たとえば、720度)が必要な場合は、回転をいくつかのシーケンスに分割する必要があります。
このSOの記事も役立つかもしれません。