Reputation: 4575
I am using the following two UIScrollView delegate methods to call another method in my UIViewController:
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// do something
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
// do something
}
I've tried various different ways of calling //do something but either end up with both not being called, or both delegate methods being called, calling //do something twice in certain situations. For example:
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if(![scrollView isDecelerating] && ![scrollView isDragging]){
//do something
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if(!decelerate){
//do something
}
}
So with the above if I scroll and let it slow to a stop, it calls scrollViewDidEndDecelerating:, but if I scroll and stop it with a tap it calls both scrollViewDidEndDragging: and scrollViewDidEndDecelerating:
I want it to call one or the other... is there something I can do with scrollViewDidEndDecelerating: and the scrollView object to stop this double method call?
Upvotes: 1
Views: 3483
Reputation: 581
// very simple
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if(!decelerate){
// Do something
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// Do something
}
Upvotes: 2
Reputation: 4575
This seems to work. Close to EmptyStack's answer
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (!dragged) {
//do something
}
dragged = NO;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if(!decelerate){
dragged = YES;
//do something
} else {
dragged = NO;
}
}
Upvotes: 0
Reputation: 51374
The scroll view delegate does its job. You can not prevent it from happening. But with a simple logic you can achieve what you are trying to do.
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
dragged = YES;
// do something
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (!dragged) {
// do something
}
dragged = NO;
}
Upvotes: 2