2017-10-06 92 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];