簡體   English   中英

如何使用objective-c從數組中選擇不同的圖像

[英]how to select the images differently from array using objective-c

我在 NSArray 中存儲了 10 個圖像。 在 UIViewController 中,我放置了 6 個 UIImageView,並在 .h 文件中給出了出口。

我需要從數組中選擇任意 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 文件中

#進口

@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;

讓我們假設(因為問題不清楚),您想將隨機圖像設置為圖像數組中的圖像視圖。 這里的挑戰是從數組中找到不重復的隨機圖像。

我還沒有測試過代碼,但這樣的事情應該可以工作:

- (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];
    }];
}

如果您不再在類中使用它,您可以從頭文件中刪除您的圖像數組聲明。

為斯威夫特

 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];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM