-1

这是我想要实现的结果:


(来源:mouseaddict.com

我的应用程序有静态图像,但我想为它们添加动作。

想象一米。它有一根锁定在底部的针(在 6:00 在圆形时钟式面),其针顶以弧形从左到右旋转。弧线(零)从指针指向(大致)圆形时钟样式面上的 9:30 位置开始,该弧的最顶部应在圆形时钟上大约 2:30 结束-风格脸。

我有几个图形元素 1) 圆形仪表面 (png) 和 2) 仪表针的垂直方向 png 文件。我需要使针以弧形图案在圆面内移动。

那么,假设上述两个要求,使用动画在仪表内旋转指针的最佳方法是什么?

我看过这个:车速表——但这是最好的方法吗?我的主要问题是我希望将针锁定在底部并且只从左到右移动少量......以及事实上几乎没有(实际上没有)文档的事实。诸如“ calculateDeviationAngle”之类的东西无法解释。

此外,车速表似乎移动了很多,并且该示例上的枢轴点不起作用......(我不认为)

我想用这样的命令来调用它:

[self moveNeedleToPosition:degreeOrClockFaceNumber]并让它从当前位置移动到一点点过去degreeOrClockFaceNumber并反弹回来休息degreeOrClockFaceNumber

TIA

4

1 回答 1

0

我做了以下事情:我把图像分成几块。轮廓(黑色)部分、背景和针。每件作品都具有完全相同的“足迹”(形状)。

假设theImageView是针的 imageView(位于其他两个 imageView 之上),我创建了以下函数:

-(void) rotateNeedle:(UIImageView *)theImageView toAngle:(float) theAngle
{
    [UIView animateWithDuration:0.5
                          delay: 0.0
                        options: UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         theImageView.transform =CGAffineTransformMakeRotation((M_PI / 180) * (theAngle + 10));
                     }
                     completion:^(BOOL finished){
                         //
                         [UIView animateWithDuration:0.5
                                          animations:^{
                                              theImageView.transform = CGAffineTransformMakeRotation((M_PI / 180) * theAngle);
                                          }];


                     }];

}

块中的第一个动画执行动画的“拍摄过去”部分......即:移动超过实际值 10 度。完成块中的第二个动画然后将针“反弹”回正确的值。这些动画的速度创造了物理效果。它对我来说效果很好。

于 2013-01-21T06:37:07.310 回答