On 18 Oct 2008, at 6:45 am, Michael Ash wrote:
- (IBAction)sliderMoved:(id)sender { SEL trackingEndedSelector = @selector(sliderEnded:); [NSObject cancelPreviousPerformRequestsWithTarget:self selector:trackingEndedSelector object:sender]; [self performSelector:trackingEndedSelector withObject:sender afterDelay:0.0]; // do whatever you want to do during tracking here } - (void)sliderEnded:(id)sender { // do whatever you want to do when tracking ends here } It may not be immediately obvious why this works. Delayed performs happen in the default runloop mode (unless you specify otherwise using the variant that has modes: at the end). Event tracking happens in a special event tracking runloop mode. So the delayed perform won't happen until the user lets go of the mouse button. To keep these delayed performs from piling up, this method first cancels any previous ones before scheduling the new one. An alternate method would be to have some sort of flag that guarantees you only schedule one, but this way is simpler and doesn't require a flag.
Reminds me of using a retriggerable monostable in hardware back in the day (that day being before even embedded micros became common) ;-)
--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 [EMAIL PROTECTED]