2013-11-28 22 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; 
} 

希望它有幫助。