2014-12-13 4 views
0

Я хочу прокрутить массив изображений и отображать каждое изображение по одному щелчком одной кнопки.Цитирование по массиву изображений

Вот мой код.

Это в методе viewDidLoad:

arrayImg = [[NSArray alloc]initWithObjects: 
      [UIImage imageNamed:@"samsung_logo_small.jpg"], 
      [UIImage imageNamed:@"Small_logo_splash.png"], 
      [UIImage imageNamed:@"Red_logos_small.png"], 
      [UIImage imageNamed:@"li-logo-small-drshdw.gif"], 
      nil]; 

Вот моя кнопка, в которой я обхвата через образы

- (IBAction)btn:(id)sender { 
for (int i = 0 ; i < [arrayImg count]; i++) { 
    [img setImage:[arrayImg objectAtIndex:i]]; 
} 

}

Проблема заключается в том, что она показывает только последнее изображение, а не все изображения.

Что я здесь делаю неправильно?

Я нашел 2 таких вопроса, но не смог найти ответ.

+0

Проблема в том, что вы просматриваете все изображения одновременно, а не по одному клику. –

+0

Что вы ожидали от циклирования изображений и установки их друг за другом на один и тот же образ? – Andy

ответ

3

Добавить следующее YourClass.m файл:

@interface YourClass() { 
    int variableName; 
} 

@end

в viewDidLoad инициализации VARIABLENAME в 0.

- (IBAction)btn:(id)sender 
{ 
    if (variableName == arrayImg.count) 
    { 
     variableName = 0; 
    } 
    [img setImage:[arrayImg objectAtIndex:classVariable]]; 
    variableName++ 
} 
+0

Привет, спасибо за ваш ответ ..... но, пожалуйста, ответьте на несколько вопросов. Когда я завершаю оператор IF в скобках, он не работает, но после этого он работает, в чем причина? Также почему arrayImg.count устанавливается равным имени переменной? Спасибо –

+0

@MuhammadAmeenSheikh Вы должны использовать скобки для 'if statement' неправильно, тогда. 'arrayImg.count' не является * установленным * для имени переменной, он * проверяется на *' variableName'. Посмотрите на различия между '=' и '==', вы должны это знать. – rebello95

+0

@MuhammadAmeenSheikh Надеюсь, вы получили мой ответ, как объяснил rebello95. Спасибо. – Anon

0

Из того, что я могу сказать, вы просматриваете все изображения одним щелчком мыши.

Лучшим подходом может быть отображение изображения после щелчка, но вместо того, чтобы зацикливать, просто увеличивайте переменную, которая представляет ваше значение индекса на 1. Таким образом, после каждого щелчка отображается следующее изображение.

Другой подход заключается в использовании таймера.

[NSTimer scheduledTimerWithTimeInterval:2.0 
           target:self 
           selector:@selector(displayNextImage:) 
           userInfo:nil 
           repeats:YES]; 
2

Если вы хотите показать одно изображение за раз, то зачем его цитировать? Вы можете сделать это следующим образом:

static int index; 

- (IBAction)btn:(id)sender { 

    [img setImage:[arrayImg objectAtIndex:index]]; 
    index = index == arrayImg.count - 1 ? 0 : index + 1; 
} 
+1

Ваш лучший ответ (использование статического). Однако вы могли бы использовать if-else для лучшей читаемости. – viral

1

В вашем viewDidLoad, добавьте еще одну строку:

[buttonName setTag:0]; 

Здесь изменения в БТН события:

- (IBAction)btn:(UIButton *)sender { 

    [img setImage: [arrayImg objectAtIndex: [sender tag]]]; 

    [sender setTag: [sender tag]+1]; 

    if ([sender tag] > [arrayImg count]) { 
    [sender setTag: 0]; 
    } 
} 

Это поможет вам в управлении памятью так как здесь нет другой дополнительной переменной флага, требуемой для хранения вашего целочисленного значения, тогда как ваш объект UIButton будет удерживаться.

Надеюсь, это поможет вам в достижении ваших требований.

+0

Предложение. У вас может быть отправитель '- (IBAction) btn: (UIButton *) отправителя {' вместо '- (IBAction) btn: (id) отправителя {', а затем напрямую получить доступ к 'sender.tag'. – Anon

+0

@ RichaSharma: Возможно, это также возможно. Обновлены соответственно. – Mrunal

+1

Первая строка не нужна, потому что 'UIView' по умолчанию имеет' тег' '0' – rebello95

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