On 07/01/2010, at 2:23 PM, Chunk 1978 wrote:

> unfortunately i'm developing for iPhone OS (which i should have stated
> earlier) so NSAnimation doesn't seem to be an option :-/


So just use NSTimer, within or without a wrapper object of your own devise.

Here's the basics of the code I used, which implements a generic fade method. 
This is called for a number of different tasks, such as fading in, fading out 
and ducking the track. Warning: this is an old project, and I think I would do 
things slightly differently now, but the basic principle of using a repeating 
timer remains the way to go, IMO.


- (void)                fadeFromLevel:(float) l1 toLevel:(float) l2 
inTime:(NSTimeInterval) time
{
        // performs a linear fade from l1 to l2 over the time interval <time>.
        
        if ( _fader == nil )
        {
                DJFadeInfo* fi = [[DJFadeInfo alloc] initWithLevel1:l1 
level2:l2 time:time];
                
                _fader = [NSTimer scheduledTimerWithTimeInterval:1.0/30.0
                                                                        
target:self
                                                                        
selector:@selector(fadeCallback:)
                                                                        
userInfo:fi
                                                                        
repeats:YES];
                _fadeStartTime = [[NSDate date] retain];
        }
}


- (void)                fadeCallback:(NSTimer*) timer
{
        //NSLog(@"fade target = %@", [self name]);
        
        DJFadeInfo*     fi = [timer userInfo];
        NSTimeInterval  t = [[NSDate date] 
timeIntervalSinceDate:_fadeStartTime];
        
        float vol = [fi level1] + ([fi delta] * ( t / [fi time]));
        
        if ( t > [fi time])
        {
                [_fader invalidate];
                _fader = nil;
                [_fadeStartTime release];
                _fadeStartTime = nil;
                
                [self setMainLevel:[fi level2]];
                [fi release];
        }
        else
        {
                [self setMainLevel:vol];
        }
}


--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