2011-12-22 2 views
-1

Когда я нажимаю предыдущую кнопку, это не имеет никакого эффекта. Следующая кнопка работает правильно, но предыдущая кнопка не показывает предыдущее изображение. Я использую scroll view для загрузки изображений:Перемещение предыдущего изображения в ScrollView с помощью кнопки

- (IBAction)next{ 
    int arraycount = [appDelegate.articles count]; 
    for (int nextIndex = [pageControl currentPage]; nextIndex < arraycount; nextIndex++) { 
     if (self.scrollView.contentOffset.x <= self.scrollView.frame.size.width) { 
      CGRect frame; 
      frame.origin.x = self.scrollView.contentOffset.x +  self.scrollView.frame.size.width; 
      frame.origin.y = 0; 
      frame.size = self.scrollView.frame.size; 
      [self.scrollView scrollRectToVisible:frame animated:YES]; 
      pageControlBeingUsed = YES; 
     } 
    } 
} 

-(IBAction)previousButtonAction 
{ 
    int arraycount = [appDelegate.articles count]; 
    NSLog(@" arraycount : %d", arraycount); 
    NSLog(@" [pageControl currentPage] : %d", [pageControl currentPage]); 
    for (int nextIndex = [pageControl currentPage]; nextIndex>arraycount; nextIndex--) { 
     if (self.scrollView.contentOffset.x >= self.scrollView.frame.size.width) { 
      CGRect frame; 
      frame.origin.x = self.scrollView.contentOffset.x + self.scrollView.frame.size.width; 
      frame.origin.y = 0; 
      frame.size = self.scrollView.frame.size; 
      [self.scrollView scrollRectToVisible:frame animated:YES]; 
      pageControlBeingUsed = YES; 
     } 
    } 
} 

ответ

4

Хорошо, теперь я думаю, что я бы подойти к этому по-разному. Я бы проверил текущее смещение перед повторным назначением.

непроверенный код:

- (IBAction)next{ 
    if (self.scrollView.contentOffset.x <= self.scrollView.frame.size.width) { 
     CGRect frame; 
     frame.origin.x = self.scrollView.contentOffset.x + self.scrollView.frame.size.width; 
     frame.origin.y = 0; 
     frame.size = self.scrollView.frame.size; 
     [self.scrollView scrollRectToVisible:frame animated:YES]; 
     pageControlBeingUsed = YES; 
    } 
} 
+0

, откуда вы увидите следующее значение индекса из цикла, которое вы здесь не указали. – user1107725

+0

doh! отредактированный ответ выше. – ader

+0

Его работа отличная благодарность, если я хочу для предыдущего, тогда может использовать только знак декремента – user1107725

0

Я бы отключить кнопку «Далее», когда пользователь получает к третьему изображению. Если вы хотите, чтобы вернуться к первому изображению, когда пользователь нажимает «рядом» в третьем изображении, то вы должны добавить дополнительный еще после того как ваш, если указать, что случай:

- (IBAction)next{ 
int arraycount = [appDelegate.articles count]; 
for (int nextIndex = [pageControl currentPage]; nextIndex < arraycount; nextIndex++) {  
    if (nextIndex < arraycount) { 
     CGRect frame; 
     frame.origin.x = self.scrollView.frame.size.width * nextIndex; 
     frame.origin.y = 0; 
     frame.size = self.scrollView.frame.size; 
     [self.scrollView scrollRectToVisible:frame animated:YES]; 
      pageControlBeingUsed = YES; 
     } 
     // If the user clicks on next in the last item, return to the first 
     else { 
     CGRect frame; 
     frame.origin.x = 0; 
     frame.origin.y = 0; 
     frame.size = self.scrollView.frame.size; 
     [self.scrollView scrollRectToVisible:frame animated:YES]; 
      pageControlBeingUsed = YES; 
     } 
    } 

}

+0

В заявлении else я отключаю кнопку, но снова возвращается ко второму изображению. – user1107725

0

arraycount = 3

[PageControl CurrentPage] равен нулю индексируется так, когда вы находитесь на странице 3 она равна 2.

так начала вашего цикл NEXTINDEX равен 2, которая меньше, чем arrayCount поэтому он попадает в ваш цикл.

изменить его:

for (int nextIndex = [pageControl currentPage]; nextIndex < (arraycount-1); nextIndex++) { 

хорошо, что делает этот вывод:

- (IBAction)next{ 
    int arraycount = [appDelegate.articles count]; 
NSLog(@" arraycount : %d", arraycount); 
NSLog(@" [pageControl currentPage] : %d", [pageControl currentPage]); 
    for (int nextIndex = [pageControl currentPage]; nextIndex < (arraycount-1); nextIndex++) { 
NSLog(@" nextIndex : %d", nextIndex); 
     CGRect frame; 
     frame.origin.x = self.scrollView.frame.size.width * nextIndex; 
     frame.origin.y = 0; 
     frame.size = self.scrollView.frame.size; 
     [self.scrollView scrollRectToVisible:frame animated:YES]; 
      pageControlBeingUsed = YES; 

     } 
} 
+0

не работает, поскольку вы говорите, что проблема в том, что в моем коде после достижения 3-х изображений снова идет второй, когда нажимается кнопка ob – user1107725

+0

Установите точку останова и выполните код, чтобы узнать, почему он попадает в цикл for. или попробуйте nslogs, как мой код выше. – ader

+0

он дает arraycount 3 и значение nextIndex 1 только – user1107725

0

Fo меня это работает в быстром 3.

func prevAction (sender:UIButton) 
{ 
    print("self.scView.contentOffset.x ..\(self.scView.contentOffset.x)") 
    if (self.scView.contentOffset.x <= self.scView.contentSize.width) 
    { 
     var frame = CGRect() 

     frame.origin.x = self.scView.contentOffset.x - 80; 
     frame.origin.y = 0; 
     frame.size = self.scView.frame.size; 

     self.scView .scrollRectToVisible(frame, animated: true) 

    } 


} 

Благодаря @ader.

Смежные вопросы