如何设置动画UIImageView的初始方向?

时间:2010-05-09 16:18:04

标签: iphone

我正在编写iphone应用程序的仪表显示器:针对固定背景UIImageView的中心针UIImageView。我是iPhone编程的新手,并不太了解CoreAnimation,但是通过查看示例并摆弄我的anchorPoint设置以及针对InterfaceBuilder中背景的针图像位置,我的指针提出了我想要的旋转点适当地集中在背景中:

self.needleIV.layer.anchorPoint = CGPointMake( 0.5, 0.68 );

我的测试动画完美地工作(针在测量仪中保持正确居中,并围绕我想要的旋转点,锚点旋转),使用以下代码:

CABasicAnimation *rotateAnimation = [CABasicAnimation animation];
rotateAnimation.keyPath = @"transform.rotation.z";
rotateAnimation.fromValue = [NSNumber numberWithFloat:DegreesToRadians( (rand() % 270 - 135) )];
rotateAnimation.toValue = [NSNumber numberWithFloat:DegreesToRadians( (rand() % 270 - 135) )];
rotateAnimation.duration = 4.0;
rotateAnimation.removedOnCompletion = NO;
// leaves presentation layer in final state; preventing snap-back to original state
rotateAnimation.fillMode = kCAFillModeBoth; 
rotateAnimation.repeatCount = 0;
rotateAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

// Add the animation to the selection layer. This causes it to begin animating. 
[self.needleIV.layer addAnimation:rotateAnimation forKey:@"rotateAnimation"];  

问题在于,在应用程序启动时,针头最初指向上方(这是针在图像文件中的样子),我无法弄清楚如何给它一个初始旋转值,而不是弄乱了动画代码。 (通过“搞乱”我的意思是指针不会在正确的轴上旋转,并且在指示器中不会被取下。)

我已经尝试将layer.transform设置为围绕z轴旋转的3d旋转矩阵,但这会使针偏离中心。我也试过这段代码:

[self.needleIV.layer setValue:[NSNumber numberWithFloat:DegreesToRadians(-135.0)] forKeyPath:@"transform.rotation.z"];

也不起作用(针从anchorPoint中心移开),我很有希望,因为它显然使用了与工作动画代码相同的转换。

我还尝试将工作动画片段放在我的视图控制器的viewDidLoad函数中,以便将指针“动画”到它的起始位置,但它根本不做任何事情 - 显然动画直到图像才会运行实际上是在屏幕上,我在调试器中确认屏幕在viewDidLoad中仍然是黑色的。

在这一点上,我即将尝试在应用程序开始设置正确旋转针的动画之后,在计时器中进行黑客攻击以“足够长时间”运行初始动画,但我真的很想知道发生了什么这里错了,为什么动画显然围绕不同的轴旋转,而不是我在旋转前/动画前的其他尝试。

1 个答案:

答案 0 :(得分:1)

anchorPoint相对于父级的边界。在viewDidLoad?

之后,父层/视图的边界是否可能发生变化?

你应该能够使用UIView中心和变换属性完成所有这些操作,这些属性是2D,因此可以围绕z轴隐式旋转。