如何从NSArray中随机选取图片并在视图中随机显示
好吧,我已经做了一些线程问如何随机显示图像/select一个随机图像。 我所认识到的是,我不知道如何将这两种方法结合在一起。
我有一个数组中的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]; }
这就是我现在的情况,我一直在玩别的代码,但是没有成功,所以就把它遗漏了。
现在你看到了我所拥有的东西,这就是我试图做的事情:我需要使用一个方法,从我的数组中随机select一个5个图像,然后在我的视图中随机显示它。
我也需要重复这个循环,但有限制。 我需要每个图像都有一个“值”,如:图像-1等于1,图像-2等于2,图像-3等于3,图像-4等于4,图像-5等于5。循环重复,直到显示的图像等于总值50。
我不知道从哪里开始使用什么方法。 我确定挑选和随机显示很容易对你们中的一些人,但值和重复,直到等于50似乎复杂。 所以,任何和所有的帮助,非常感谢! 在此先感谢任何可以帮助的人,即时通讯编程新手,如果你能解释为什么你使用了你的代码,那将会更有帮助! 谢谢!
编辑:这家伙试图帮助我在我的另一个线程添加整个采摘随机图像以及。 他的回应是: 如何显示多个UIImageViews ,我用他的代码,但没有发生。 我不确定他的代码是否在某处出错,或者我做错了什么。
使用一个recursion循环和一个int来跟踪你的期望数量为50的进度。
每次循环,你都会想要:
- 生成一个新的随机数(0-4)
- 使用你的随机数从你的数组中select一个图像
- 把你的随机数字加到你的int中,并检查你是否已经达到了50。
- 如果你已经击中了50,就完成了
- 如果你还没有击中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 } }
像这样的东西应该为你工作。
此代码使用github上提供的M42RandomIndexPermutation类:
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; }
也许这可以帮助:
int index = arc4random % ([_imageArray count] - 1); imageView.image = [_imageArray objectAtIndex:index];
干杯!