20
votes

I'm using UIScrollView and using scrollRectToVisible:animated This is working fine for me. But I want to scroll to a location slowly so that user can notice the effect. Is it possible.

I'm trying the following code, but didn't succeed.

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:2.0];  
[scrlView scrollRectToVisible:<<some cgrect>> animated:YES];            
[UIView commitAnimations];          
1

1 Answers

57
votes

The solution is actually pretty easy. If you use [scrollView scrollRectToVisible:frame animated:YES] the scrollview will start it's own animation, so in order to animate with your duration you have to use [scrollView scrollRectToVisible:frame animated:NO] within your animation.

In other words: This will work.

[UIView animateWithDuration:3 
                      delay:0 
                    options:UIViewAnimationOptionCurveEaseInOut 
                 animations:^{ [scrollView scrollRectToVisible:frame animated:NO]; } 
                 completion:NULL];