iPhoneでは、指のタッチを使用して中心点の周りに回転イメージを実装する方法は?指のタッチで自動的に中心点を中心にイメージを回転する方法
ちょうどホイールのように、あなたがiPhoneの画面に指を置くと、突然動いて、イメージがホイールのように中心点の周りを回転するようになり、しばらくしてから徐々に遅くなり、ついに停止します。
いくつかのコード(Object-C)やいくつかの示唆を与えるのに役立つ人は誰ですか?
iPhoneでは、指のタッチを使用して中心点の周りに回転イメージを実装する方法は?指のタッチで自動的に中心点を中心にイメージを回転する方法
ちょうどホイールのように、あなたがiPhoneの画面に指を置くと、突然動いて、イメージがホイールのように中心点の周りを回転するようになり、しばらくしてから徐々に遅くなり、ついに停止します。
いくつかのコード(Object-C)やいくつかの示唆を与えるのに役立つ人は誰ですか?
私はアフィン変換を使用します。トランスフォームプロパティを使用して、レイヤーまたはUIエレメントに変換を割り当てることができます。
CGAffineTransform CGAffineTransformMakeRotation( CGFloat angle)
を使用して回転変換を作成すると、要素を回転させる変換が返されます。デフォルトの回転は、中心点の周りにある必要があります。
回転は360度に制限されていますので、それ以上(例えば720度まで)回転させたい場合は、回転をいくつかのシーケンスに分割する必要があります。
this SO articleも便利です。
ビューまたはレイヤのトランスフォームプロパティを使用して、表示された画像を回転することができます。回転部品が移動する限り、あなたはtouchesBegan、touchesMoved、touchesEndedを使って、あなたのビュー内のタッチの位置と動きを追跡するだけです。
タッチの更新間隔と時間を使用して速度を計算し、それを使用して回転速度を設定します。画像の回転を開始したら、周期的に位置を更新し(NSTimer、多分)、回転速度を一定にします。
私は昨日、「スピン・ザ・ボトル」-appで作業していました。ウィンドウには、ImageViewがあります。ボトルは、ユーザーが指を触れるようにタッチして回転するようになっています。私はImageViewをタッチイベント(TouchesBegan、Touchesoved、TouchesEnd)中に回転させるのに苦労しました。 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ポイントの値が違うことになります。いくつかの考え、googelingと読書の後、私は問題の簡単な解決策を思い付いた。 ImageViewの "SuperView"プロパティ。代わりに小さな変化が、それはたくさんより簡単に、ノー私はUITouch-metohs LocationInViewとPreviousLocationInViewを使用すると、右のx &のy座標を取得することができたこと持つ
PointF pt = (touches.AnyObject as UITouch).LocationInView(this.SuperView);
。彼女は私のコードの一部です。
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);
}
}
びっくりする方法を理解するために時間を費やすのに役立つ希望は、ボトルを回転させる! :)