UIScrollView 和 UIPageControl 之间的冲突事件


//AppDelegate.m
didFinishLaunchingWithOptions:launchOptions{
...
appStartController = [[NavViewController alloc] init];
self.window.rootViewController = appStartController;
...  }
//NavViewController.h
@property(strong, nonatomic) IBOutlet UIScrollView *pageScroll;
@property(strong, nonatomic) IBOutlet UIPageControl *pageControl;
//NavViewController.m
...
[pageControl addTarget:self action:@selector(getChangePage:)     forControlEvents:UIControlEventValueChanged];
- (void)getChangePage:(UIPageControl *)pageControl
{
int page = pageControl.currentPage;
CGRect frame = pageScroll.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
[pageScroll scrollRectToVisible:frame animated:YES];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
if(page!=pageControl.currentPage){
pageControl.currentPage = page;   }
}

它看起来很好,可以运行得很好。但是我的问题是当我单击pageControl时,它的当前数字发生了变化,然后页面滚动转到当前数字,当前数字将快速转到最后一个,然后返回。我知道原因,但我不知道如何解决这个问题。

例如:当前数字 = 1;
当我单击右侧部分时,当前数字= 2 ->滚动开始移动-> 1 ->移动超过一半 -> 2当然,时间很短.如何解决?

这是我

如何解决它的方法:

首先,当寻呼机点击时,我为其设置布尔指示器:

- (IBAction)changePage:(id)sender {
    animationPerforming = YES; //animation indicator
    //perform scrolling
    [self.scrollView scrollRectToVisible:frame animated:YES];
}

然后在滚动视图DidScroll上,如果动画执行等于是,我根本不会更改任何内容。

- (void)scrollViewDidScroll:(UIScrollView *)sender {e
    if (animationPerforming) {
        return;
    }
    //else change page number
}
动画

完成后,我将动画执行设置为NO。这是来自的方法

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    animationPerforming = NO;
}

希望它有帮助。

最新更新