Thanks, Graham, I realized the timer would have jitter.  When I realized what 
was going on and began to think about how to fix it, that is when I had one of 
those head-slap moments where I asked, "Why am I not using CoreAnimation for 
this?"

-Michael

On Mar 11, 2010, at 4:53 PM, Graham Cox wrote:

> 
> On 12/03/2010, at 5:23 AM, Michael A. Crawford wrote:
> 
>> - (void)timerFireMethod:(NSTimer*)theTimer
>> {
>> #if 0
>>   // Here I was using a periodic timer to animate the scroll.  I noticed that
>>   // the animation wasn't smooth and then remembered that CA is supposed to 
>> do
>>   // the animating for me.  So, I switched to trying the code below but that
>>   // doesn't work either.  I'm really just grasping at straws here.
>>   static CGPoint origin = {0.0f, 0.0f};
>>   origin.x += 5.0f;
>>   [scrollLayer scrollToPoint:origin];
>> #else
> 
> 
> Hi Michael,
> 
> This is a classic "naive" mistake. You're incrementing the position by a 
> fixed amount each time the timer fires. Problem is, you can't guarantee that 
> the timer will fire exactly at the time it should, so your scrolling speed is 
> at the mercy of how busy things are, so will speed up and slow down.
> 
> Recall that speed is distance/time, so if you want a constant speed, you have 
> to work out how much distance the thing should have moved in the actual time 
> interval you got.
> 
> Roughly (typed into mail):
> 
> - (void)      timerFireMethod:(NSTimer*) theTimer
> {
>    NSTimeInterval elapsedTime = [NSDate timeIntervalSinceReferenceDate] - 
> m_startTime; // m_startTime ivar set when the animation began
>    CGFloat distance = m_speed * elapsedTime;  // m_speed is the scrolling 
> speed in points per second
> 
>    [thing setPosition:distance];
> }
> 
> With this approach, the exact timing intervals don't matter - the position 
> will be correct. If things get busy what will happen is that the jumps 
> between positions will get a bit larger.
> 
> That said, Core Animation might do the job better, but I just wanted to point 
> out what the problem was with your original approach.
> 
> --Graham
> 
> 

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to