动画移动图像

时间:2013-06-30 18:13:46

标签: ios objective-c uiview cgaffinetransform

我正在尝试创建我的第一个iPhone应用程序。该应用程序只是一个指向北方的箭头。 到目前为止,我已经添加了一个箭头图像,并通过以下代码创建了一个动画:

- (void)setDirection:(float)degree {
        float rad = M_PI * (float)degree / 180.0;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:10];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
         //[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        DirectionArrow.transform = CGAffineTransformMakeRotation(rad);
        [UIView commitAnimations];
    }

我的问题是每次调用方法时箭头在旋转之前“移动”。我试过各种各样的东西来控制旋转角度,但没有任何运气。

我希望箭头(图像)围绕自己的轴旋转。

1 个答案:

答案 0 :(得分:4)

这是因为您的视图围绕(0, 0)旋转,(0, 0)是视图的左上角。你想要围绕箭头的中心旋转。

为此,您必须构建一个执行以下操作的转换:

  1. 翻译箭头,使其中心位于rad
  2. CGFloat h = view.bounds.size.height; CGFloat w = view.bounds.size.width; CGAffineTransform t1 = CGAffineTransformMakeTranslation(-w/2, -h/2); CGAffineTransform t2 = CGAffineTransformMakeRotation(rad); CGAffineTransform t3 = CGAffineTransformMakeTranslation(w/2, h/2); CGAffineTransform t = CGAffineTransformConcat(CGAffineTransformConcat(t3, t2), t1); DirectionArrow.transform = t; 度旋转视图。
  3. 将箭头翻译回来((1)的逆变换。)
  4. 它应该是(最多翻转t1和t3):

    {{1}}