iOS 关于颜色的库 - Wonderful

Wonderful这个库主要是与UIColor息息相连,其中一共包含五个子文件,UIColor+Wonderful,UIColor+Separate,SXColorGradientView,SXMarquee,SXColorLabel.h。分别对应颜色扩展,色彩分离,颜色渐变,跑马灯和字体颜色大小不一5种主要功能

项目地址:iOS 颜色库

一、UIColor+Wonderful

  • 1、这个分类提供了100多种的颜色扩展,譬如卡其色,银色,草坪色,金色,巧克力色,等。虽然这个功能可能不太适合UI规范都直接指定好了企业级的App,但是对于一些小型的App和Demo类程序还是有一些用武之地。例如:
self.view.backgroundColor = [UIColor khakiColor];
self.view.backgroundColor = [UIColor chocolateColor];
  • 2、平均每个色系有10中颜色,不仅可以使用名称直接敲出,还能使用颜色阶梯的宏敲出,在你想不起词的时候更加方便。宏从1~10是颜色渐深,可以根据自己的感觉使用浅一级或深一级的宏;例如:
self.view.backgroundColor = Wonderful_BlueColor1;
self.view.backgroundColor = Wonderful_YelloeColor1;
  • 3、提供了颜色微调方案,可以让一个已知颜色的rgb的某值上升或者下降若干,可用于不管背景是什么色,边框都比背景深20之类的操作。也可以将认可颜色的详细值打印出来。例如:
UIColor *navColor = [[UIColor redColor]up:SXColorTypeBlue num:30]; // 在红色上把蓝色色值提高30
UIColor *barColor = [[UIColor blueColor]up:1 num:140]; // 可以直接用枚举对应的tag
UIColor *bgColor = [[UIColor blackColor]down:SXColorTypeAlpha num:10]; // 取一个比黑色稍微淡的颜色
UIColor *lineColor = [bgColor up:3 num:20]; // 不管背景是什么颜色 线都比背景浅20.

效果如下:
这里写图片描述这里写图片描述

二、UIColor+Separate

  • 1、提供颜色分离方案,可以将任意颜色的RGB和alpha的值取出
UIColor *testC = [UIColor salmonColor];
float r= [testC red];
float g= [testC green];
float b= [testC blue];
float alpha= [testC alpha];
NSLog(@"******  %f,%f,%f,%f",r,g,b,alpha);

内部实现:

- (CGFloat) red
{
    const CGFloat *c = CGColorGetComponents(self.CGColor);
    return c[0];
}
- (CGFloat) green
{
    const CGFloat *c = CGColorGetComponents(self.CGColor);
    if ([self colorSpaceModel] == kCGColorSpaceModelMonochrome) return c[0];
    return c[1];
}
- (CGFloat) blue
{
    const CGFloat *c = CGColorGetComponents(self.CGColor);
    if ([self colorSpaceModel] == kCGColorSpaceModelMonochrome) return c[0];
    return c[2];
}
- (CGFloat) alpha
{
    const CGFloat *c = CGColorGetComponents(self.CGColor);
    return c[CGColorGetNumberOfComponents(self.CGColor)-1];
}
  • 2、可以通过一个颜色算出此颜色的反色,使得背影无论被用户设置成什么色,文字颜色都是背景的反色
self.showLbl1.backgroundColor = [UIColor peachRed];
self.showLbl1.textColor = [[UIColor peachRed]reverseColor];

内部实现:

- (UIColor *)reverseColor
{
    float r= 1 - [self red];
    float g= 1 - [self green];
    float b= 1 - [self blue];
    float alpha= [self alpha];
    UIColor *rcolor = [UIColor colorWithRed:r green:g blue:b alpha:alpha];
    return rcolor;
}
  • 3、直接打印颜色的各项详细数值
[[UIColor salmonColor]printDetail];

内部实现:

- (NSString *)printDetail
{
    float r= [self red];
    float g= [self green];
    float b= [self blue];
    float R= [self red] * 255;
    float G= [self green] *255;
    float B= [self blue] *255;
    float alpha= [self alpha];
    NSString *str = [NSString stringWithFormat:@"\nThis Color's Red:%.0f, Green:%.0f, Blue:%.0f, Alpha:%.0f\nDecimal red:%.4f green:%.4f blue:%.4f \nHexadecimal 0x%x%x%x",R,G,B,alpha,r,g,b,(int)R,(int)G,(int)B];
    NSLog(@"%@",str);
    return str;
}

三、SXColorGradientView

  • 1、颜色渐变的view
    可以设置任意颜色到透明的过渡。如果有意,完全可以将导航栏设置成从上往下的渐变色。当下这种渐变色基本上都是以一张背景图片,并且还不宜改变,使用原生方法实现渐变色的成本肯定比图片要小;
SXColorGradientView *grv1 = [SXColorGradientView createWithColor:[UIColor paleGreen] frame:CGRectMake(10, 10, 80, 30) visible:YES direction:SXColorGradientToRight];
  • 2、设置两个颜色相互过渡
SXColorGradientView *grv3 = [SXColorGradientView createWithFromColor:SXRGB16Color(item3.colorValue) toColor:SXRGB16Color(item31.colorValue) frame:CGRectMake(10, 50, 80, 30) direction:SXGradientToRight];
  • 3、设置向上下左右四个过渡的方向
typedef NS_ENUM(NSInteger, SXGradientDirection) {
    SXGradientToTop = 1,
    SXGradientToLeft = 2,
    SXGradientToBottom = 3,
    SXGradientToRight = 4,
};
  • 4、内部实现
- (instancetype)initWithColorArray:(NSArray *)colorArray frame:(CGRect)frame direction:(SXGradientDirection)direction{
    if (self = [super initWithFrame:frame]) {
        SXColorGradientView *gradientView = [[SXColorGradientView alloc]initWithFrame:frame];
        self = gradientView;
        CAGradientLayer *la = [[CAGradientLayer alloc]init];
        la.frame = gradientView.bounds;
        [gradientView.layer addSublayer:la];
        NSMutableArray *marray = [NSMutableArray array];
        for (UIColor *color in colorArray) {
            [marray addObject:(__bridge id)color.CGColor];
        }
        la.colors = marray;
        switch (direction) {
            case 1:
                la.startPoint = CGPointMake(0.5, 1);
                la.endPoint = CGPointMake(0.5, 0);
                break;
            case 2:
                la.startPoint = CGPointMake(1, 0.5);
                la.endPoint = CGPointMake(0, 0.5);
                break;
            case 3:
                la.startPoint = CGPointMake(0.5, 0);
                la.endPoint = CGPointMake(0.5, 1);
                break;
            case 4:
                la.startPoint = CGPointMake(0, 0.5);
                la.endPoint = CGPointMake(1, 0.5);
                break;
            default:
                break;
        }
    }
    return self;
}

四、SXMarquee

  • 1、跑马灯使用
SXMarquee *mar = [[SXMarquee alloc]initWithFrame:CGRectMake(20, 255, 335, 35) speed:4 Msg:@"重大活动,天猫的双十一,然而并没卵用" bgColor:[UIColor salmonColor] txtColor:[UIColor whiteColor]];
[mar changeMarqueeLabelFont:[UIFont systemFontOfSize:26]];
[mar changeTapMarqueeAction:^{
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"点击事件" message:@"可以设置弹窗,当然也能设置别的" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [alert show];
}];
[mar start];
  • 2、跑马灯的背景可以设置任何颜色
  • 3、可以实现点击拖动,或者绑定更多点击事件;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxiaobukuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值