 <p>First, add two actions for your stepper:</p> <pre><code>[theStepper addTarget:self action:@selector(stepperTapped:) forControlEvents:UIControlEventTouchDown]; [theStepper addTarget:self action:@selector(stepperValueChanged:) forControlEvents:UIControlEventValueChanged]; </code></pre> <p>Here's what those actions look like:</p> <pre><code>- (IBAction)stepperTapped:(id)sender { self.myStepper.stepValue = 1; self.myStartTime = CFAbsoluteTimeGetCurrent(); </code></pre> <p>}</p> <pre><code>- (IBAction)stepperValueChanged:(id)sender { self.myStepper.stepValue = [self stepValueForTimeSince:self.myStepperStartTime]; // handle the value change here </code></pre> <p>}</p> <p>Here's the magic code:</p> <pre><code>- (double)stepValueForTimeSince:(CFAbsoluteTime)aStartTime { double theStepValue = 1; CFAbsoluteTime theElapsedTime = CFAbsoluteTimeGetCurrent() - aStartTime; if (theElapsedTime &gt; 6.0) { theStepValue = 1000; } else if (theElapsedTime &gt; 4.0) { theStepValue = 100; } else if (theElapsedTime &gt; 2.0) { theStepValue = 10; } return theStepValue; </code></pre> <p>}</p>