使用遵循圆形路径的NSTimer逐帧动画

时间:2010-09-03 14:16:11

标签: iphone objective-c animation nstimer trigonometry

我正在使用NSTimer在屏幕上设置对象数组的动画。目前他们从左向右移动。但是,我希望他们以循环的方式移动。我怎么能这样做?

scrollItems = [NSTimer scheduledTimerWithTimeInterval:1.0/30.0 
                                                   target:self 
                                                 selector:@selector(scrollItems)
                                                 userInfo:nil 
                                                  repeats:YES];

- (void)scrollItems {
    for (UIImageView *anItem in itemsArray) {
        CGRect oldFrame = anItem.frame;
        anItem.frame = CGRectMake(oldFrame.origin.x+5, oldFrame.origin.y, oldFrame.size.width, oldFrame.size.height);
    }
}

当我说循环时尚时,我的意思是好像他们遵循圆周。谢谢!

1 个答案:

答案 0 :(得分:1)

基本上以同样的方式 - 认为你需要破坏三角学。

http://en.wikipedia.org/wiki/Trigonometry

现在你只需要向x添加五个就可以移动它。相反,你需要根据sin cos和crap计算一个新的x和y,以及某种计数器告诉它应该在圆圈上的位置。

更新: unit circle也可能有所帮助。

所以,在时钟的任何时间你的对象应该在这个圆圈的某个点上,对吗?所以你必须从时间开始 - >角度 - > x& y在圆上坐标。向后工作,如果你有一个角度(0到360度之间的数字),你可以在圆上得到一个x y坐标 - 这就是单位圆链接。

所以你需要一个角度。那个角度将是时间的函数,对吧?因此,在时间0,你可以说这是一个0的角度,然后你就知道你应该根据上面链接中的公式在圆圈上的哪个位置。在时间1,它可能是1的角度,等等。随着时间的推移继续这样做,你正在画一个圆圈。您只需要弄清楚如何将时间转换为0-360之间的数字。该函数将决定对象移动的速度。

所以基本上你需要一些可以用时间计算x y的东西。在那之后,你可以变得聪明,并且该功能也可以接受速度,中心和半径,并根据这些东西返回x y。由你决定。

抱歉,我没有时间编写此代码,但它应该非常可行。