2013-11-28 20 views
0
//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,其currentNumber改变,然后pageScroll turnTo currentNumber,currentNumber将转向最后一个快速,然后回头。我知道原因,但我不知道如何解决这个问题。UIScrollView与UIPageControl之间发生冲突事件

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

回答

0

这里是我如何解决它:

首先,当寻呼机点击,我设置布尔指标到它:

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

} 

然后在scrollViewDidScroll我根本就没有改变任何东西,如果animationPerforming等于YES。

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

动画完成后,我将animationPerforming设置为NO。这是方法从

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

希望它有帮助。