Отображение случайного изображения в анимации UIImageView - PullRequest
1 голос
/ 19 ноября 2011

Обычным способом отображения анимации мы предоставляем последовательность изображений, которые отображаются одно за другим.Что-то вроде:

NSArray *images1 = [[NSArray alloc] initWithObjects:
                                  [UIImage imageNamed:@"img1.png"],
                                  [UIImage imageNamed:@"img2.png"],
                                  [UIImage imageNamed:@"img3.png"],
                                  [UIImage imageNamed:@"img4.png"],
                                  nil];

        images1=[[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 256.0, 256.0)];
        images1.transform = rotateTransform1;
        images1.animationImages = myDustImages1;
        images1.animationDuration = 0.2; // seconds
        images1.animationRepeatCount = 0; // 0 = loops forever
        [images1 startAnimating];

Можно ли как-нибудь показать случайным образом выбранное изображение из этих четырех (или любого количества) изображений?В настоящее время я думаю о чем-то вроде

NSArray *images1 = [[NSArray alloc] initWithObjects:
                                  [UIImage imageNamed:@"img1.png"],
                                  [UIImage imageNamed:@"img2.png"],
                                  [UIImage imageNamed:@"img3.png"],
                                  [UIImage imageNamed:@"img4.png"],

                                  [UIImage imageNamed:@"img2.png"],
                                  [UIImage imageNamed:@"img3.png"],
                                  [UIImage imageNamed:@"img4.png"],
                                  [UIImage imageNamed:@"img1.png"],

                                  [UIImage imageNamed:@"img3.png"],
                                  [UIImage imageNamed:@"img4.png"],
                                  [UIImage imageNamed:@"img2.png"],
                                  [UIImage imageNamed:@"img1.png"],
                                  nil];..........

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

Можно ли как-нибудь улучшить его?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011
-(NSArray *)shuffledArray
{

 NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count]];

 NSMutableArray *copy = [self mutableCopy];
 while ([copy count] > 0)
 {
  int index = arc4random() % [copy count];
  id objectToMove = [copy objectAtIndex:index];
  [array addObject:objectToMove];
  [copy removeObjectAtIndex:index];
 }

   [copy release];
   return array;
}

Попробуйте что-то вроде этого

3 голосов
/ 19 ноября 2011

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

В любом случае вы можете сделать это самостоятельно, просто установив таймер и случайным образом выбирая новое изображение каждый раз, когда срабатывает таймер. Если вы хотите убедиться, что вы не показываете одно и то же изображение дважды подряд, самый простой способ - просто случайным образом выбрать изображение из массива, пока не получите другое. Если вы хотите убедиться, что вы показываете все 4 изображения, прежде чем показывать одно из них дважды, затем случайным образом перетасуйте свой массив и уберите элементы с фронта, затем, когда у вас закончится, перетасуйте его снова (и чтобы избежать проблемы с дублированием, просто продолжайте перетасовать, пока первая запись в массиве отличается от последней записи в предыдущем массиве).

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