0

我正在通过设置它的 origin 属性来为一个在屏幕上弹跳的球设置动画,但我发现球的移动并不顺畅。我检查了调用 drawInRect 的频率,它是 30 次/秒,我认为这不足以使快速球运动顺利进行。

我的问题是,是否可以要求系统以 60fps 刷新/重绘屏幕?你能在 OpenGL 中做同样的事情吗?

4

2 回答 2

0

您可以考虑设置显示链接功能。这将允许您为通过系统的每个绘制调用(或每个特定数量的帧)触发一个方法。你要处理的类是CADisplayLink,这里有一个教程。如果您的动画仍然不够快,那么您的动画将永远不会看起来流畅;)。

于 2012-05-16T13:36:17.010 回答
-1

您无需更改 ios 的 fps 即可获得正确的动画效果。您只需在您的代码中更改它,您可以使用 NSTimer(示例):-

在某些动画上初始化计时器:-

    float theInterval = 1.0/30.0;//Here you can set the frame rate , now set on 30
    [NSTimer scheduledTimerWithTimeInterval:theInterval target:self
        selector:@selector(animateView:) userInfo:nil repeats:YES];

    - (void)animateView:(NSTimer *)theTimer 
    {
    //    your animation block here....
    Something like..
    view.center = CGPointMake(view.center.x+viewMovement.x,
                    view.center.y+viewMovement.y);

        BOOL collision = view.center.y >= view2.center.y - 16 &&
        view.center.y <= view2.center.y + 16 &&
        view.center.x > view2.center.x - 32 &&
        view.center.x < view2.center.x + 32;

    if(collision)
        viewMovement.y = -viewMovement.y

}

这只是一个例子,相应地实现你的逻辑。

于 2012-05-16T12:37:59.387 回答