使用它更新位置和倾斜来移动/旋转对象?

时间:2011-12-29 13:56:45

标签: iphone objective-c cocoa-touch core-animation core-graphics

这基本上是一个简单的问题,我无法解决这个问题......

  1. 所以,我有一个特定帧UIImageView的对象,我用CAAnimation实现旋转和平移,它位于新坐标(x,y),并且已经旋转了一定程度。

  2. 此动画效果很好。但是如果我再次从THAT状态进行旋转和移动,我希望对象在旋转后使用STEP 1中的新框架和新属性,并再次按新角度旋转。

  3. 截至目前,当我再次尝试旋转时,它会使用其标准状态&帧大小(在初始化期间)并对其执行旋转...

    And by this I mean... If I have a square of frame (100, 200, 10, 10), and I rotate it by 45 degrees, the shape is now a different square, with different frame size and end points compared to the original square, and I implement a new rotation by (say) 152 degrees on it and it needs to perform a rotation on the newer square... But it turns out that it uses the same frame size as the previous one (x,y, 10, 10).

    如何使用更新的位置和状态继续旋转/移动对象?


    注意: (如果您需要查看动画代码)

    这是我动画的代码,涉及简单的旋转和移动! http://pastebin.com/cR8zrKRq

1 个答案:

答案 0 :(得分:1)

您需要在animationDidStop:方法中保存旋转步骤并更新对象旋转。所以,在你的cas中,你应该申请:

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{ 
   //angle is global
   CATransform3D rotationTransform = CATransform3DMakeRotation((angle%4)*M_PI_4, 0, 0, 1);
   [object.layer setTransform:rotationTransform];
   object.center = tempFrame; //already there
}

其中angle是动画(步骤)的整数计数器,值为0,1,2,3。我的步骤是M_PI_4。可能有一个更好的解决方案,但这应该做的伎俩