2014-11-01 11 views
0

我通過一些結果圖像創建了一個教程,並在其上添加了一個頁面控件。另外,我添加了一個滑動手勢,通過更改圖片來響應。在下面的代碼中,根據滑動的方向(左/右)來定義開關盒以確定哪個圖像和點應該是下一個。向右滑動,頁面控件的當前頁面會發生變化,但點不會變爲

- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)sender 
{ 
// NSLog(@"swiped"); 
    NSArray *images; 

    if (self.selectedRow == 0) { 
     images = [[NSArray alloc] initWithObjects:@"w8.JPG",@"w7.JPG",@"w6.JPG",@"w5.JPG",@"w4.JPG",@"w3.JPG", @"w2.JPG", @"w1.JPG" ,@"w9.JPG", nil]; 

     self.pageControl.hidden = NO; 
     [self.pageControl setNumberOfPages:9]; 

     UISwipeGestureRecognizerDirection direction = [(UISwipeGestureRecognizer *) sender direction]; 

     switch (direction) { 
      case UISwipeGestureRecognizerDirectionRight: 
       if (pageController == 0 || imageIndex == 8) 
       { 
        self.Oops = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"You cannot swipe to the left, there are not any previous steps." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
        [self.Oops show]; 
       } 
       else { 
        [self.pageControl setCurrentPage:pageController - 1]; 
        pageController = pageController - 1; 
       } 
       imageIndex++; 
       break; 
      case UISwipeGestureRecognizerDirectionLeft: 
       if (pageController < 8 && pageController >= 0) { 
        [self.pageControl setCurrentPage:pageController]; 
        pageController = pageController + 1; 
       } 
       else { 
        [self.pageControl setCurrentPage: pageController ]; 
        pageController = 0; 
       } 
       imageIndex--; 
       break; 
      default: 
       break; 
     } 
     NSLog(@"pagecontroller is %li and imageIndex is %li " , pageController, imageIndex); 
     imageIndex = (imageIndex < 0) ? ([images count] - 1): imageIndex % [images count]; 
     self.imageView.image = [UIImage imageNamed:[images objectAtIndex:imageIndex]]; 
    } 

正如你在代碼中看到的,有一個NSLog;當我運行該應用程序時,一切正常,但是當我向右滑動以查看以前的圖像時,儘管NSLog顯示點和圖像的所有索引都正確更改,並且我們看到之前的圖像,但這些點不會改變。再次向右滑動,點會改變,但會延遲,因爲必須分類的圖像和點的順序變得無序,例如最後一個圖像顯示爲第一個點。 我確定我的算法是正確的,因爲我用NSLog檢查了它,並且在向右滑動之前,一切正常。 任何想法?

我已經改變了代碼位:

switch (direction) { 
      case UISwipeGestureRecognizerDirectionRight: 
       if (pageController != 0 && imageIndex != 9) { 
        [self.pageControl setCurrentPage:(pageController - 1)]; 
        pageController --; 
        imageIndex++; 
       } 
       break; 
      case UISwipeGestureRecognizerDirectionLeft: 
       if (pageController <= 8 && pageController >= 0) { 
        [self.pageControl setCurrentPage:pageController]; 
        pageController = pageController + 1; 
        imageIndex--; 
       } 
       break; 
      default: 
       break; 
     } 

現在唯一的問題是,網頁控制計數當前點兩次,當我刷到不同的方向。

回答

0

您的imageIndex++imageIndex--行在錯誤的地方。 (例如,如果pageController已經爲0,那麼您可能不想更改圖像)。他們移動到:

- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)sender 
 
{ 
 
// NSLog(@"swiped"); 
 
    NSArray *images; 
 
    
 
    if (self.selectedRow == 0) { 
 
     images = [[NSArray alloc] initWithObjects:@"w8.JPG",@"w7.JPG",@"w6.JPG",@"w5.JPG",@"w4.JPG",@"w3.JPG", @"w2.JPG", @"w1.JPG" ,@"w9.JPG", nil]; 
 
     
 
     self.pageControl.hidden = NO; 
 
     [self.pageControl setNumberOfPages:9]; 
 
     
 
     UISwipeGestureRecognizerDirection direction = [(UISwipeGestureRecognizer *) sender direction]; 
 
     
 
     switch (direction) { 
 
      case UISwipeGestureRecognizerDirectionRight: 
 
       if (pageController == 0 || imageIndex == 8) 
 
       { 
 
        self.Oops = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"You should turn over to the left." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
 
        [self.Oops show]; 
 
       } 
 
       else { 
 
        [self.pageControl setCurrentPage:pageController - 1]; 
 
        pageController = pageController - 1; 
 
        imageIndex++; 
 
       } 
 
       break; 
 
      case UISwipeGestureRecognizerDirectionLeft: 
 
       if (pageController < 8 && pageController >= 0) { 
 
        [self.pageControl setCurrentPage:pageController]; 
 
        pageController = pageController + 1; 
 
        imageIndex--; 
 
       } 
 
       else { 
 
        [self.pageControl setCurrentPage: pageController ]; 
 
        pageController = 0; 
 
       } 
 
       break; 
 
      default: 
 
       break; 
 
     } 
 
     NSLog(@"pagecontroller is %li and imageIndex is %li " , pageController, imageIndex); 
 
     imageIndex = (imageIndex < 0) ? ([images count] - 1): imageIndex % [images count]; 
 
     self.imageView.image = [UIImage imageNamed:[images objectAtIndex:imageIndex]]; 
 
    }

在你修改的代碼,我認爲你需要以不同的設置頁面控件(的PageController + 1)向左滑動:

switch (direction) { 
     case UISwipeGestureRecognizerDirectionRight: 
      if (pageController != 0 && imageIndex != 9) { 
       [self.pageControl setCurrentPage:(pageController - 1)]; 
       pageController --; 
       imageIndex++; 
      } 
      break; 
     case UISwipeGestureRecognizerDirectionLeft: 
      if (pageController <= 8 && pageController >= 0) { 
       [self.pageControl setCurrentPage:pageController+1]; 
       pageController = pageController + 1; 
       imageIndex--; 
      } 
      break; 
     default: 
      break; 
    } 
+0

我做它。這個問題不僅存在,而且如果我們只向左滑動,每當你到達最後,最後一個圖像就會出現在第一個點上。 @pbasdf – informaticien 2014-11-01 09:23:23

+0

pageController和imageIndex的初始值是什麼? – pbasdf 2014-11-01 11:54:01

+0

imageIndex是8,pageController是0. @pbasdf – informaticien 2014-11-01 11:58:03

相關問題