目录
目录
文章目录
  1. iOS随机色实现原理详细解析
    1. 1、前沿:
    2. 2、实现原理
    3. 3、先取随机数
    4. 4、iOS 随机颜色-宏定义方法
    5. 5、iOS 随机颜色-十六进制方法

iOS随机色实现原理详细解析

iOS随机色实现原理详细解析

1、前沿:

最近做弹幕遇到蛋疼的事了,字体颜色非要用十六进制的随机颜色,找了好久没有相关资料,就自己动手了,以后小伙伴儿们再也不用担心随机颜色了!

2、实现原理

Apple 公司为我们提供了自定义 RGB 色值的方法:

1
+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;

从方法名可以看出
使用该方法设置我们需要的颜色需要三个(CGFloat)参数:(CGFloat)red (CGFloat)green (CGFloat)blue 和一个(CGFloat)设置透明度。

我们常说的 RGB 三基色:范围0-255;而这三个参数确实需要归一化后的参数,即范围为0-1;
所以我们在使用的过程中,需要先对RGB归一化为:R/255.0 G/255.0 B/255.0;

3、先取随机数

OC 的随机数取值方法:arc4random_uniform(10),arc4random_uniform()后面括号里的值就是我们要取的随机数的最大值.

例如:RGB 色值都是介于 0~255之间,所以我们要取随机颜色的话必须要取到每个色值的随机值:
arc4random_uniform(255)

4、iOS 随机颜色-宏定义方法

1
2
3
4
#pragma mark - 随机颜色(RGB)

用一个宏就搞定了:
#define BARandomColor [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1.0f];

5、iOS 随机颜色-十六进制方法

  • 5.1 十六进制【来源:百度百科】

    十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
  • 5.2 iOS 开发中的实际应用

    我们把所有的十六进制的数字创建一个十六进制数组:
    NSArray *colorArray = @[@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9",@"a", @"b", @"c", @"d", @"e", @"f"];

    然后定义一个(NSString )类型的字符变量来取值备用:
    `NSString
    colorString = @””;`

    接着我们就要遍历这个颜色数组,取随机值,然后赋值给上面声明的 colorString 变量:
1
2
3
4
5
6
7
for (NSInteger i= 0; i < 6; i++)
{
int r = arc4random()%colorArr.count;
NSString *string = colorArr[r];
colorString = [NSString stringWithFormat:@"%@%@", colorString, string];
NSLog(@"随机颜色为3:%@", colorString);
}
  • 5.3 最后我们还需要优化下细节,比如:

    十六进制的颜色色值我们只有六位数,所以我们就取前六位就行了:
    NSString *colorStr = [colorString substringFromIndex:6];
  • 5.4 还可以更细心点,万一我们取到的值不是6位,就要特殊处理了:
    1
    2
    3
    4
    if (colorStr.length < 6)
    {
    colorStr = @"00EBFF";
    }
  • 5.5 说了这么多,看看最终的源码吧:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma mark - 随机颜色(十六进制)
- (NSString *)ba_randomColor
{
NSString *colorString = @"";
NSArray *colorArray = @[@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9",@"a", @"b", @"c", @"d", @"e", @"f"];

for (NSInteger i= 0; i < 6; i++)
{
int r = arc4random()%colorArray.count;
NSString *string = colorArray[r];
colorString = [NSString stringWithFormat:@"%@%@", colorString, string];
NSLog(@"随机颜色为3:%@", colorString);
}
NSLog(@"随机颜色为:%@", colorString);
return colorString;
}

详情请看:『BABaseProject』

支持一下
扫一扫,支持 博爱