在UIImageView动画中显示随机图像

时间:2011-11-19 06:10:37

标签: iphone ios ipad uiimageview

在显示动画的常规方式中,我们提供一个接一个显示的图像序列。类似的东西:

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 个答案:

答案 0 :(得分:3)

人们非常擅长看模式。如果你确实想要重复,那么至少要以素数为基础,因为那些更难以发现。

在任何情况下,您都可以通过设置计时器并在每次计时器滴答时随机选择一个新图像来自己完成此操作。如果您想确保不连续两次显示相同的图像,最简单的方法是从您的阵列中随机选择一个图像,直到您得到另一个图像。如果你想确保你在显示其中一个图像之前显示所有4个图像,然后随机地移动你的阵列并从正面取出物品,然后当你用完时,再次洗牌(并避免重复的问题,只需继续洗牌直到数组中的第一个条目与前一个数组中的最后一个条目不同。

答案 1 :(得分:3)

-(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;
}

尝试这样的事情