2017-10-06 86 views
0

我如下所示在阵列中存储10个图像。如何使用UIImageView从阵列中选择随机图像

images=[[NSMutableArray alloc]initWithObjects:[UIImage imageNamed:@"Navarre-Family-Eye-Care-Navarre-Florida-Optometrist-Santa-Christmas-Toy-Safety.jpg"],[UIImage imageNamed:@"Christmas-Wallpapers-HD-Picture.jpg"],[UIImage imageNamed:@"Christmas-Wallpaper-jesus-9413550-1024-768.jpg"],[UIImage imageNamed:@"tree.jpg"],[UIImage imageNamed:@"luxury-christmas-napkins-father-christmas-1635-p.jpg"],[UIImage imageNamed:@"Navarre-Family-Eye-Care-Navarre-Florida-Optometrist-Santa-Christmas-Toy-Safety.jpg"],[UIImage imageNamed:@"Christmas-Wallpapers-HD-Picture.jpg"],[UIImage imageNamed:@"Christmas-Wallpaper-jesus-9413550-1024-768.jpg"],[UIImage imageNamed:@"tree.jpg"],[UIImage imageNamed:@"luxury-christmas-napkins-father-christmas-1635-p.jpg"], nil]; 

在h文件

NSMutableArray *images; 

如我存储在阵列10倍的图像。从这我需要选择随机6倍的图像和需要在的UIImageView显示量。

在UIViewController我已经放置6 UIImageView和连接如下。

@property(weak,nonatomic)IBOutlet UIImageView *b1; 
@property(weak,nonatomic)IBOutlet UIImageView *b2; 
@property(weak,nonatomic)IBOutlet UIImageView *b3; 
@property(weak,nonatomic)IBOutlet UIImageView *b4; 
@property(weak,nonatomic)IBOutlet UIImageView *b5; 
@property(weak,nonatomic)IBOutlet UIImageView *b6; 

那该怎么办?

+3

完全重复(https://stackoverflow.com/questions/46559004/how- [如何不同于阵列使用目标c选择图像] –

+2

请注意,您不应该将'UIImage'存储在数组中,它可能会由于内存不足而导致应用程序崩溃,您应该只存储名称字符串,稍后在你的b1-b6中使用 – Tj3n

+0

@ Tj3n如何存储名称字符串 – teena

回答

0

您需要先找到数组的随机索引。那么你可以访问索引数据。在这里我示例了swift的代码。

let randomIndex = arc4random() % 10 
let image = imageArray[randomIndex] 

现在您可以将图像用于imageview。希望你可以把它转换成目标c。

+0

我需要在objective-c – teena

0
-(NSMutableArray*)getRandomValueFromArray:(NSMutableArray*)arrAllData randomDataCount:(NSInteger)count { 
NSMutableArray *arrFilterData = [[NSMutableArray alloc]init]; 
for(int i=0; i<count; i++){ 

NSInteger index = arc4random() % (NSUInteger)(yourArray.count); 
[arrFilterData addObject:[arrAllData objectAtIndex:index]]; 
[yourArray removeObjectAtIndex:index]; 
} 
return arrFilterData; 
} 

给你自己的数。

0

您实际上有5张图片两次,因此您的imageViews上至少会有一张双倍的图片。

static NSArray *imagenames = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    imagenames = @[ 
     @"Navarre-Family-Eye-Care-Navarre-Florida-Optometrist-Santa-Christmas-Toy-Safety.jpg", 
     @"Christmas-Wallpapers-HD-Picture.jpg", 
     @"Christmas-Wallpaper-jesus-9413550-1024-768.jpg", 
     @"tree.jpg", 
     @"luxury-christmas-napkins-father-christmas-1635-p.jpg", 
     @"Navarre-Family-Eye-Care-Navarre-Florida-Optometrist-Santa-Christmas-Toy-Safety.jpg", 
     @"Christmas-Wallpapers-HD-Picture.jpg", 
     @"Christmas-Wallpaper-jesus-9413550-1024-768.jpg", 
     @"tree.jpg", 
     @"luxury-christmas-napkins-father-christmas-1635-p.jpg"]; 
}); 

NSArray<UIImageView *> *imageViews = @[self.b1, self.b2, self.b3, self.b4, self.b5, self.b6]; 
NSMutableArray * tmpnames = imagenames.mutableCopy; 
for (UIImageView *imageView in imageViews) { 
    NSUInteger randomIndex = arc4random_uniform((uint32_t)tmpnames.count); 
    imageView.image = [UIImage imageNamed:tmpnames[randomIndex]]; 
    [tmpnames removeObjectAtIndex:randomIndex]; 
} 
1

简单的解决方案,尝试此

NSUInteger randomIndexValue = arc4random() % [images count];