Отображение изображений в последовательности с циклом - PullRequest
3 голосов
/ 13 мая 2011

Я получил NSArray с 5 картинками.Я хочу отображать их один за другим в цикле.Мой код:

 NSArray *tabImage = [[NSArray alloc] init];

tabImage = [[NSArray arrayWithObjects:  
               [UIImage imageNamed:@"picto_1.png"],
               [UIImage imageNamed:@"picto_2.png"],
               [UIImage imageNamed:@"picto_3.png"],
               [UIImage imageNamed:@"picto_4.png"],
               [UIImage imageNamed:@"picto_5.png"],
               nil] retain];

int var = 0;
var = indexPath.row;

for (int var = 0; var < 20; var++) {
    pictoImage.image = [tabImage objectAtIndex:(var % 5)];
}

Я постоянно получаю одну и ту же фотографию.

Спасибо за помощь.

Ответы [ 4 ]

6 голосов
/ 13 мая 2011

Я предполагаю, pictoImage - это UIImageView. В этом случае посмотрите ссылку на класс , в частности свойства animationImages.

 pictoImage.animationImages = [NSArray arrayWithObjects:  
                                   [UIImage imageNamed:@"picto_1.png"],
                                   [UIImage imageNamed:@"picto_2.png"],
                                   [UIImage imageNamed:@"picto_3.png"],
                                   [UIImage imageNamed:@"picto_4.png"],
                                   [UIImage imageNamed:@"picto_5.png"],
                                   nil];

 // How many seconds it should take to go through all images one time.
 pictoImage.animationDuration = 5.0;

 // How many times to repeat the animation (0 for indefinitely).
 pictoImage.animationRepeatCount = 4;

 [pictoImage startAnimating];
3 голосов
/ 13 мая 2011

Вы не предоставляете времени фреймворка для фактической визуализации изображений в окне.

Все ваши обновления объединяются в один вызов setNeedsDisplay. На следующей итерации цикла выполнения представление изображения будет отображаться с использованием последнего изображения, которое вы установили в цикле.

2 голосов
/ 13 мая 2011

Если pictoImage - UIImageView, ответ @ Hagelin - лучший путь.Теперь, если pictoImage не является UIImageView объектом, вам придется использовать другой подход, и это определенно не цикл.

Установите NSTimer с желаемым интервалом времени и вызовите метод, который обновляет pictoImage итерацию по tabImages.Это должно быть примерно так: -

- (void)setup {
    ...

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

    ...
}

- (void)updatePictoImage:(NSTimer*)theTimer {
    static int i = 0;
    if ( i > 20 ) {
        pictoImage.image = [tabImages objectAtIndex:(i % 5)];
    } else {
       [theTimer invalidate];
    }
}

Это должно обновлять pictoImage каждые 2 секунды с изображениями в tabImages.

0 голосов
/ 13 мая 2011

Вы не печатаете ничего .

Вы переопределяете содержимое вашего pictoImage 20 раз подряд, оставляя его с последним назначением, когда var равен 19, поэтому оно должно быть picto_4.png.

Кроме того, все объявление var вообще не имеет особого смысла ... сначала вы устанавливаете его на 0, затем устанавливаете на indexPath.row, и в цикле оно полностью переопределяется .. ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...