如何使用objective-c从数组中select不同的图像

我已经在NSArray中存储了10张图片。 在UIViewController中,我放置了6个UIImageView,并在.h文件中给出了sockets。

我需要从数组中select任何6张图像怎么办? 并需要在UIImageView中显示图像。

- (void)viewDidLoad { [super viewDidLoad]; 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]; NSString *dd=[NSString stringWithFormat:@"%@", images]; NSLog(@"%@",dd); } - (void)setImagesForImageViews:(NSArray<UIImageView*>*)viewsArray fromArray:(NSArray<UIImage*>*)imageArray { if(images == nil || viewsArray == nil || viewsArray.count > images.count) { return; // early return } NSMutableArray* randomImageArray = [NSMutableArray arrayWithCapacity:viewsArray.count]; while (randomImageArray.count < viewsArray.count) { UIImage* image; do { NSUInteger random = (NSUInteger)arc4random_uniform(images.count); image = [imageArray objectAtIndex:random]; } while ([randomImageArray containsObject:image]); [randomImageArray addObject:image]; } [viewsArray enumerateObjectsUsingBlock:^(UIImageView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { obj.image = [randomImageArray objectAtIndex:idx]; }]; } 

在.h文件中

#import

 @interface memory_test : UIViewController { NSMutableArray *images; } @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; 

让我们假设(因为问题不清楚),你想设置随机图像图像数组的图像。 这里面临的挑战是从数组中find随机图像,而不是重复的。

我没有testing代码,但是这样的事情应该工作:

 - (void)viewDidLoad { [super viewDidLoad]; NSArray* images = [self imagesArray]; NSArray* views = [self imageViewsArray]; [self setRandomImagesForImageViews:views fromArray:images]; } - (NSArray<UIImage*>*)imagesArray { return @[[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"]]; } - (NSArray<UIImageView*>*)imageViewsArray { return @[_b1, _b2, _b3, _b4, _b5, _b6]; } - (void)setRandomImagesForImageViews:(NSArray<UIImageView*>*)viewsArray fromArray:(NSArray<UIImage*>*)imageArray { if(imageArray == nil || viewsArray == nil || viewsArray.count > imageArray.count) { return; // early return } NSMutableArray* randomImageArray = [NSMutableArray arrayWithCapacity:viewsArray.count]; while (randomImageArray.count < viewsArray.count) { UIImage* image; do { NSUInteger random = (NSUInteger)arc4random_uniform(imageArray.count); image = [imageArray objectAtIndex:random]; } while ([randomImageArray containsObject:image]); [randomImageArray addObject:image]; } [viewsArray enumerateObjectsUsingBlock:^(UIImageView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { obj.image = [randomImageArray objectAtIndex:idx]; }]; } 

如果在类中不再使用,则可以从头文件中删除图像数组声明。

对于SWIFT

  class ViewController: UIViewController { //array with ImageView @IBOutlet var imageViews: [UIImageView]! //array with Image lazy var imagesArray = [UIImage]() override func viewDidLoad() { super.viewDidLoad() //initiate image let imageOne :UIImage = #imageLiteral(resourceName: "exchange") let imageTwo :UIImage = #imageLiteral(resourceName: "indexPhone") let imageThree :UIImage = #imageLiteral(resourceName: "indexCheer") let imageFour :UIImage = #imageLiteral(resourceName: "indexTrade") let imageFive :UIImage = #imageLiteral(resourceName: "indexWashMachine") //add image to array imagesArray = [imageOne,imageTwo,imageThree,imageFour,imageFive] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //Action for Button @IBAction func randomSelect(_ sender: Any) { //temporary array for images var tempImageArray = imagesArray for imageView in imageViews{ // get random index for array images let index = Int(arc4random_uniform(UInt32(tempImageArray.count))) // set random image for ImageView imageView.image = tempImageArray[index] // remove arleady added Image from temporary array tempImageArray.remove(at: index) } } } 

对于目标-C

 @interface ViewController () //array with ImageView @property (strong, nonatomic) IBOutletCollection(UIImageView) NSArray *imageViews; //array with Image @property (strong, nonatomic) NSArray* imagesArray; - (IBAction)randomSelect:(id)sender; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //initiate image UIImage *imageOne = [UIImage imageNamed:@"exchange"]; UIImage *imageTwo = [UIImage imageNamed:@"indexCheer"]; UIImage *imageThree = [UIImage imageNamed:@"indexPhone"]; UIImage *imageFour = [UIImage imageNamed:@"indexTrade"]; UIImage *imageFive = [UIImage imageNamed:@"indexWashMachine"]; //Initiate array with image self.imagesArray = [NSArray arrayWithObjects:imageOne,imageTwo,imageThree,imageFour,imageFive, nil]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)randomSelect:(id)sender { //temporary array for images NSMutableArray* tempImageArray = [[NSMutableArray alloc]initWithArray:self.imagesArray]; for (UIImageView* imageView in self.imageViews){ // get random index for array images int index = arc4random()%(tempImageArray.count-1); // set random image for ImageView imageView.image = [tempImageArray objectAtIndex:index]; // remove arleady added Image from temporary array [tempImageArray removeObjectAtIndex:index]; } }