所以,我对iOS编程还比较新手,接手了前同事的一个项目。我们正在构建一个包含仪表盘UI的应用程序。当有数据到达时,我们希望能够平稳地将“图层”(指针图像)从当前角度顺时针旋转到新的目标角度。以下是我们拥有的东西,适用于数据传输慢的情况:
-(void) MoveNeedleToAngle:(float) target
{
static float old_Value = 0.0;
CABasicAnimation *rotateCurrentPressureTick = [CABasicAnimation animationWithKeyPath:@"transform.rotation");
[rotateCurrentPressureTick setDelegate:self];
rotateCurrentPressureTick.fromValue = [NSSNumber numberWithFloat:old_value/57.2958];
rotateCurrentPressureTick.removedOnCompletion=NO;
rotateCurrentPressureTick.fillMode=kCAFillModeForwards;
rotateCurrentPressureTick.toValue=[NSSNumber numberWithFloat:target/57.2958];
rotateCurrentPressureTick.duration=3; // constant 3 second sweep
[imageView_Needle.layer addAnimation:rotateCurrentPressureTick forKey:@"rotateTick"];
old_Value = target;
}
问题在于我们有一个新的数据方案,其中新数据可以更快地进入(并调用上述方法),在动画完成之前。我认为正在发生的是,动画从旧目标重新启动到新目标,这使得它非常跳跃。因此,我想知道如何修改上述函数以添加连续/可重启行为,具体步骤如下:
1. 检查当前动画是否正在进行中, 2. 如果是,则找出当前动画角度在哪里,然后 3. 取消当前动画,并从当前旋转到新目标旋转开始一个新动画。
是否可能将该行为构建到上述函数中?
谢谢。如果问题似乎不够了解,请原谅,我已经学习并理解了上述对象/方法,但不是专家。
layer.setAffineTransform
。从清晰度的角度来看,这更符合你正在做的事情(最终结果可能相同,但我自己喜欢事情更加清晰明了)。 - Mark A. Donohoe