domhofmann / PRTween

Lightweight tween library for iOS
BSD 2-Clause "Simplified" License
459 stars 63 forks source link

Frame rate is not consistent if runloop falls below 60 fps #36

Open jowie opened 11 years ago

jowie commented 11 years ago

If the app is running at less than 60 fps, the NSTimer is not called quickly enough and the tween runs too slowly.

I have made another fix to my local copy, whereby each frame it calculates timeOffset based upon CFAbsoluteTimeGetCurrent(), adding a new ivar lastAbsoluteTime:

- (void)update
{
    timeOffset += (lastAbsoluteTime == 0) ? kPRTweenFramerate : (CFAbsoluteTimeGetCurrent() - lastAbsoluteTime);
    lastAbsoluteTime = CFAbsoluteTimeGetCurrent();
    ...

Also resetting lastAbsoluteTime when the NSTimer is reinitialised (as per my other issue):

    if (timer == nil)
    {
        lastAbsoluteTime = 0;
        timer = [NSTimer scheduledTimerWithTimeInterval:kPRTweenFramerate target:self selector:@selector(update) userInfo:nil repeats:YES];
    }