UISlider animation seamlessly

I want to animate a UISlider, for example. From 0.25 to 0.75 and vice versa. This should show the user what to do.

I tried this:

[self incrementCounter:[NSNumber numberWithInt:0]]; -(void) incrementCounter:(NSNumber *)i { [Slider setValue:[i floatValue]/1000]; [self performSelector:@selector(incrementCounter:) withObject:[NSNumber numberWithInt:i.intValue+1] afterDelay:0.001]; } 

but it’s not so smooth ... can I use transitions for this?

 [Slider setValue:1 animated:YES]; 

- fast...

 [UIView animateWithDuration:2.0 animations:^{ [Slider setValue:0.2]; }]; [UIView animateWithDuration:2.0 animations:^{ [Slider setValue:0.5]; }]; 

Just animates the second ...

+7
source share
2 answers

You need to bind the animation by putting the second animation in the completion block of the first:

 -(IBAction)animateSlider:(id)sender { [UIView animateWithDuration:2 animations:^{ [self.slider setValue:.75]; } completion:^(BOOL finished) { [UIView animateWithDuration:2 animations:^{ [self.slider setValue:0.25];//or `[self.slider setValue:(.75)-(.5*finished)];` if you want to be safe }]; }]; } 
+14
source

Swift 2.2 version for rdelmar answer

 @IBOutlet weak var slider: UISlider! func animateSlider(sender: AnyObject){ UIView.animateWithDuration(2, animations: {() in self.slider.setValue(0.75, animated: true) }, completion:{(Bool) in UIView.animateWithDuration(2, animations: {() in self.slider.setValue(0.25, animated: true) }) }) } 

and to call the function pass UISlider in parameter

 animateSlider(self.slider) 
+2
source

All Articles