【问题标题】:How to RANDOMLY show many images on a single UIImage如何在单个 UIImage 上随机显示多个​​图像
【发布时间】:2015-03-31 01:53:36
【问题描述】:

所以下面的代码按照我放置的顺序显示了所有这些颜色的动画。但是,如何使颜色以无特定顺序出现,而是以随机顺序出现?

bird.animationImages=[NSArray arrayWithObjects:
                          [UIImage imageNamed:@"red.png"],
                          [UIImage imageNamed:@"brown.png"],
                          [UIImage imageNamed:@"green.png"],
                          [UIImage imageNamed:@"gold.png"],
                          [UIImage imageNamed:@"black.png"], nil];

    [bird setAnimationRepeatCount:0];
    bird.animationDuration=1;
    [bird startAnimating];

【问题讨论】:

  • 查看此SO answer 以随机化颜色数组。

标签: ios animation uiimage nsarray imagenamed


【解决方案1】:

- (UIImage *)getRandomImages { NSArray *imagesArray = @[@"image1", @"image2", @"image3"]; NSInteger randomNumber = arc4random_uniform((unsigned int)imagesArray.count - 1); NSString *imageNames = imagesArray[randomNumber]; return [UIImage imageNamed: imageNames]; } 上面的代码会生成正确的随机图片。

【讨论】:

    【解决方案2】:

    如果您已经创建了所有这些图像并将它们添加到项目中,那么您只需编写一个辅助方法来为自己获取一个随机图像。它可能看起来像这样:

    - (UIImage*)getRandomColorImage
    {
        NSInteger kNumberOfColors = 5; // or however many color images you have
        NSInteger randomNumber = arc4random() % kNumberOfColors;
        if(randomNumber == 0)
        {
            return [UIImage imageNamed:@"red"];
        }
        else if (randomNumber == 1)
        {
            return [UIImage imageNamed:@"brown"];
        }
        else if (randomNumber == 2)
        {
            return [UIImage imageNamed:@"green"];
        }
        else if (randomNumber == 3)
        {
            return [UIImage imageNamed:@"gold"];
        }
        else
        {
            return [UIImage imageNamed:@"black"];
        }
    }
    

    如果您想让事情变得更加灵活,您可以摆脱添加到项目中的图像,并在 Core Graphics 库和这个酷炫的 github 存储库的帮助下即时创建任何彩色图像:@987654321 @ .这 4 行的神奇之处在于(生成随机颜色):

    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
    

    【讨论】:

    • 使用arc4random_uniform(kNumberOfColors)而不是arc4random() % kNumberOfColors,这样可以消除偏见并且更简洁。
    【解决方案3】:

    更简单的getRandomColorImage(只是为了好玩):

    - (UIImage *)getRandomColorImage {
        NSArray *colors = @[@"red", @"brown", @"green", @"gold", @"black"];
        NSInteger randomNumber = arc4random_uniform((unsigned int)colors.count);
        NSString *colorName = colors[randomNumber];
        return [UIImage imageNamed: colorName];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      相关资源
      最近更新 更多