在网格视图中从40个图像中随机显示25个图像

时间:2011-01-31 05:16:00

标签: iphone

我正在创建一个iphone应用,我需要在其中创建25个图像的网格视图。 我这样做是通过在一个数组中拍摄25张图像,并通过使用for循环显示它们,方法是在下面的代码中更改x轴和y轴的尺寸:

for(int i=0; i<25; i++)
    {
    if(i>0)
    {
        if(i%5==0)
        {
            xaxis=30;
            yaxis=yaxis+35;
        }
    }
        iconButton[i]=[UIButton buttonWithType:UIButtonTypeRoundedRect];
        iconButton[i].frame=CGRectMake(xaxis, yaxis, 50, 30);
        [iconButton[i] setBackgroundImage:[iconArray objectAtIndex:i] forState:UIControlStateNormal];
        [iconButton[i] addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:iconButton[i]];
        xaxis=xaxis+55;
    }

它工作正常,但我总共有40张图像,我希望每次应用程序启动时都应该从25张图像中随机选取25张图像。

我该怎么做,请帮助我。

非常感谢您的帮助。 问候 iPhoneDeveloper11

4 个答案:

答案 0 :(得分:5)

创建一个包含41个数字(0-40)的数组,使用部分Fisher-Yates shuffle对其进行随机播放 并使用数组的前25个元素。

伪代码(random(x)返回从0到x的随机数):

array = [0, 1, 2, ..., 40]
for i in 0, 1, ..., 24 do
    swap array[i], array[i + random(40 - i)]
truncate array to 25 elements.

答案 1 :(得分:2)

int random = arc4random() % 40;

给出一个介于0到40之间的随机数,从中选择图像

答案 2 :(得分:0)

你基本上想要随机化图像的顺序然后选择前25个。我不知道你是如何安排你的数据结构的,但这里有一个整数的例子:

for (int x = 39; x > 0; x--)
{
  int tmp = element[x];
  int newLoc = random()%(x+1);
  element[x] = element[newLoc];
  element[newLoc] = tmp;
}

我假设element包含您要混淆的值。

答案 3 :(得分:0)

  1. 创建一个集合
  2. 创建0到40之间的随机数并将其放入集合
  3. 检查设置尺寸
  4. 如果设置尺寸小于25,请转到步骤2
  5. 将set转换为数组
  6. 这是一种方法,当然有更好更快的方法,但如果你想要简单,可以使用像这样的东西或者peoro的建议。