0

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

我在一个数组中有 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,image-2 等于 2,image-3 等于 3,image-4 等于 4,image-5 等于 5。重复循环,直到显示的图像总数等于 50。

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

编辑:这个人试图在我的另一个线程中帮助我添加整个随机图像。他的回复在这里:如何显示多个 UIImageViews,我使用了他的代码,但什么也没发生。我不确定他的代码是否有问题,或者我做错了什么。

4

3 回答 3

2

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

每次循环时,您都需要:

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

像这样的东西:

//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
  }

}

像这样的东西应该适合你。

于 2013-10-23T01:48:35.910 回答
0

this code uses the M42RandomIndexPermutation class available on github:

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;
}
于 2013-10-23T01:10:57.033 回答
0

也许这可以帮助:

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

imageView.image = [_imageArray objectAtIndex:index];

干杯!

于 2013-10-23T01:37:17.117 回答