Iphone 如何给每个按钮一个不同的图像?

Iphone 如何给每个按钮一个不同的图像?,iphone,objective-c,image,Iphone,Objective C,Image,我有一个应用程序,你有3个按钮,如果你按下一个按钮,三个按钮的按钮图像会改变,但按钮2和按钮3可能与按钮1的图片不同,按钮3可能与按钮2的图片不同 我试过这个,但没用 NSInteger imageIndex1 = arc4random_uniform(images.count); NSInteger imageIndex2 = arc4random_uniform(images.count); NSInteger imageIndex3 = arc4r

我有一个应用程序,你有3个按钮,如果你按下一个按钮,三个按钮的按钮图像会改变,但按钮2和按钮3可能与按钮1的图片不同,按钮3可能与按钮2的图片不同

我试过这个,但没用

       NSInteger imageIndex1 = arc4random_uniform(images.count);
       NSInteger imageIndex2 = arc4random_uniform(images.count);
       NSInteger imageIndex3 = arc4random_uniform(images.count);

    if (imageIndex1 == imageIndex2 ) {
        imageIndex2 = arc4random_uniform(images.count);
    }

    else if (imageIndex1 == imageIndex3  ) {
        imageIndex3 = arc4random_uniform(images.count);
    }

        else if (imageIndex2 == imageIndex3  ) {
            imageIndex3 = arc4random_uniform(images.count);

    }



    else
       [self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
      imageIndex1 = imageIndex2;
      imageIndex1 = imageIndex3;
      imageIndex2 = imageIndex3;

在这里,您在else部分中设置了
self.picture1
图像,因此,如果先有任何条件为true,则不会设置
self.picture1
图像,因此您面临的这个问题也会为
else
部分中的每个按钮添加设置图像的代码,下面的代码

       [self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
试试这个

 if (imageIndex2 == imageIndex1 ) {
            imageIndex2 = arc4random_uniform(images.count);
    }

    if (imageIndex3 == imageIndex1 ) {
            imageIndex3 = arc4random_uniform(images.count);
          }


[self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
       imageIndex1 = imageIndex2;
       imageInde

x1 = imageIndex3;
试试这个:

NSInteger imageIndex1 = arc4random_uniform(images.count);
NSInteger imageIndex2 = arc4random_uniform(images.count);
NSInteger imageIndex3 = arc4random_uniform(images.count);

while (imageIndex2 == imageIndex1 ) {
    imageIndex2 = arc4random_uniform(images.count);
}

while (imageIndex3 == imageIndex1 ) {
    imageIndex3 = arc4random_uniform(images.count);
}


[self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
[self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
[self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];

我想我找到了解决办法。 下面是代码:

    Boolean p1 =true;
    Boolean p2 = true;
    Boolean p3 = true;


       NSInteger imageIndex1 = arc4random_uniform(images.count);
       NSInteger imageIndex2 = arc4random_uniform(images.count);
       NSInteger imageIndex3 = arc4random_uniform(images.count);

    if (imageIndex1 == imageIndex2 ) {
        p1 = false;
        imageIndex2 = arc4random_uniform(images.count);

    }

    if(imageIndex1 == imageIndex3  ) {
        p2 = false;
        imageIndex1 = arc4random_uniform(images.count);

    }

       if (imageIndex2 == imageIndex3  ) {
           p3 = false;
            imageIndex3 = arc4random_uniform(images.count);


    }



    if(p1 == true && p2 == true && p3 == true) {
       [self.picture1 setImage:images[imageIndex1] forState:UIControlStateNormal];
       [self.picture2 setImage:images[imageIndex2] forState:UIControlStateNormal];
       [self.picture3 setImage:images[imageIndex3] forState:UIControlStateNormal];
    }

看起来此文件的另一个副本已作为副本关闭。这个问题的答案是:这个问题的目的是随机改变按钮上的图像。但问题是,在图像数组中选择一个随机索引有时会生成当前索引(它是随机的,因此概率为1/array.count)。这里有一种排除给定索引的方法

- (NSUInteger)randomUnsignedLessThan:(NSInteger)max excluding:(NSUInteger)exclude {

    NSInteger firstTry = -1;
    while (firstTry == exclude) firstTry = arc4random() % max;
    return firstTry;
}

注意,这种方法一次调用ARC4Advices,需要1 +n个调用,概率为1 /max ^ n,因此对于低范围和高性能要求,您可能会考虑排除一个索引的不同算法。< /P>而不是<代码>图像[IVIDENTXX2] 和图像[IVIDENXX3] 使用<代码>图像[IVIDENTX1]