如何从NSArray中选择随机图像并在视图上随机显示

时间:2013-10-23 00:56:02

标签: ios objective-c xcode image arc4random

好吧我已经做了几个线程询问如何随机显示图像/选择随机图像。我已经意识到,我不知道如何将这两种方法结合在一起。

我在阵列中有5张图片。

我的.h文件:

@property (strong, nonatomic) NSArray *imageArray;

我的.m文件:

    - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

UIImage *image1 = [UIImage imageNamed:@"image-1.png"];
UIImage *image2 = [UIImage imageNamed:@"image-2.png"];
UIImage *image3 = [UIImage imageNamed:@"image-3.png"];
UIImage *image4 = [UIImage imageNamed:@"image-4.png"];
UIImage *image5 = [UIImage imageNamed:@"image-5.png"];

_imageArray = @[image1, image2, image3, image4, image5];
}

这就是我现在所拥有的,我一直在玩其他在其他地方找到的代码,但没有成功,所以不予考虑。

现在你看到我拥有的东西,这就是我想要做的: 我需要使用一种方法,从我的数组中随机选择我的5张图像之一,然后在我的视图中随机显示。

我还需要重复这个循环,但是有约束。我需要每个图像都有一个“值”,如:image-1等于1,图像-2等于2,图像-3等于3,图像-4等于4,图像-5等于5。重复循环,直到显示的图像等于总值50.

我不确定从哪里开始使用哪种方法。我肯定随机挑选和显示对你们中的一些人来说很容易,但值和重复直到等于50似乎很复杂。所以非常感谢任何和所有的帮助!提前感谢任何可以提供帮助的人,我对编码很新,所以如果你能解释为什么使用你的代码,它会更有帮助!谢谢!

编辑:这家伙试图帮助我在我的另一个线程中添加整个选择随机图像。他的答复在这里:How to display multiple UIImageViews我使用了他的代码但没有任何反应。我不确定他的代码是否在某处出错或者我做错了什么。

3 个答案:

答案 0 :(得分:1)

使用递归循环和int来跟踪您所需数量为50的进度。

每次循环,你都会想:

  1. 生成新的随机数(0-4)
  2. 使用随机数从阵列中选择图像
  3. 将您的随机数添加到您的int并检查您是否达到了50。
  4. 如果你达到了50,那就完成了
  5. 如果你没有达到50,那就再做一次。
  6. 这样的事情:

    //in your .h declare an int to track your progress
    int myImgCount;
    
    //in your .m
    -(void)randomizeImages {
    
      //get random number
      int randomImgNum = arc4random_uniform(5);  
    
      //use your random number to get an image from your array
      UIImage *tempImg = [_imageArray objeactAtIndex:randomImgNum];
    
      //add your UIImage to a UIImageView and place it on screen somewhere
      UIImageView *tempImgView = [[UIImageView alloc] initWithImage:tempImg];  
    
      //define the center points you want to use
      tempImgView.center = CGPointMake(yourDesiredX,yourDesiredY);   
    
      [self addSubview:tempImgView];
      [tempImgView release];
    
    
      //increment your count
      myImgCount = myImgCount+(randomImgNum+1); 
    
      //check your count
      if (myImgCount<50) {
        [self randomizeImages];  //do it again if not yet at 50
      }
    
    }
    

    这样的事情对你有用。

答案 1 :(得分:0)

此代码使用github上提供的M42RandomIndexPermutation类:

https://github.com/Daij-Djan/DDUtils/tree/master/model/M42RandomIndexPermutation%20%20%5Bios%2Bosx%5D

int main(int argc, const char * argv[])
{

@autoreleasepool {
    NSArray *images = @[@"image-1", @"image-2", @"image-3", @"image-4", @"image-5"];

    M42RandomIndexPermutation *permutation = [[M42RandomIndexPermutation alloc] initWithCount:images.count usingSeed:[NSDate date].timeIntervalSince1970];
    for(int i = 0; i<images.count; i++) {
        NSInteger index = [permutation next];
        NSLog(@"%@",images[index]);
    }

    //TODO assign them to imageviews instead of logging them
}

return 0;
}

答案 2 :(得分:0)

也许这会有所帮助:

int index = arc4random % ([_imageArray count] - 1);

imageView.image = [_imageArray objectAtIndex:index];

干杯!