0

iPad アプリケーションで画像を (たとえば時計回りに) 回転させる必要があります。画像はビュー内に保持されます。

UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(startX+lineWidth, startY+lineHeight, lineWidth, lineHeight)];
view1.tag = 0;
view1.image = [UIImage imageNamed:[images objectAtIndex:0]];

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event

私はこれをやっています:

CGPoint d1 = [touch locationInView:touch.view];
CGPoint d2 = [touch previousLocationInView:touch.view];               
CGFloat angle1 = atan2(d1.y, d1.x);
CGFloat angle2 = atan2(d2.y, d2.x);
subview.transform = CGAffineTransformRotate(subview.transform, angle2-angle1);

ビューは回転していますが、タッチ(または私の開発環境ではカーソル)とスムーズに連動しません。むしろ、タッチよりも少し前に浮かんでいます。

私は何が欠けていますか?

4

1 に答える 1

0

これに を使用しないのはなぜですかUIRotationGestureRecognizer( Apple ドキュメントのイベント処理プログラミング ガイドを参照)。

標準の回転ジェスチャ (2 本の指) を使用して回転を処理し、ユーザーと角度を直接提供し、使いやすくなっています。

しかし、あなたの質問に直接答えるには、おそらく角度を累積しないことが問題です。現在のタッチと前のタッチの角度の差をCGAffineTransformRotate使用して変換を適用します。angle2-angle1したがって、指を動かすたびsubviewに、タッチの開始点と現在の点ではなく、前の点と現在の点の差だけである角度だけ回転を変更します。の代わりにtouchesBegan:withEvent:forで取得したポイントを使用する必要があります。d2previousLocationInView:

于 2012-11-20T13:48:21.583 に答える