美文网首页iOS开发点滴iOS 开发继续加油iOS学习开发
图片UIImage方式实现渐变色UIColor的方法与***As

图片UIImage方式实现渐变色UIColor的方法与***As

作者: 小蜜蜂Bee | 来源:发表于2018-05-14 14:01 被阅读179次

        前段时间我们UI设计了一个左右颜色渐变的导航栏,样式还真是漂亮啊!我也很喜欢,可是的时候好看归好看,Xcode要报错一样不放过!哈哈哈!

    下面就先说说我是怎么实现,首先提供一个UIColor的分类:

    .h文件如下:

    //

    //  UIImage+GradientColor.h

    //  advertisingCattle

    //

    //  Created by 小蜜蜂 on 2018/4/13.

    //  Copyright © 2018年 小蜜蜂. All rights reserved.

    //

    #import

    typedefNS_ENUM(NSUInteger, GradientType) {

        GradientTypeTopToBottom =0,//从上到小

        GradientTypeLeftToRight =1,//从左到右

        GradientTypeUpleftToLowright =2,//左上到右下

        GradientTypeUprightToLowleft =3,//右上到左下

    };

    @interfaceUIImage (GradientColor)

    + (UIImage*)gradientColorImageFromColors:(NSArray*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize;

    @end

    .m文件如下

    //

    //  UIImage+GradientColor.m

    //  advertisingCattle

    //

    //  Created by 小蜜蜂 on 2018/4/13.

    //  Copyright © 2018年 小蜜蜂. All rights reserved.

    //

    #import "UIImage+GradientColor.h"

    @implementationUIImage (GradientColor)

    + (UIImage*)gradientColorImageFromColors:(NSArray*)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize {

        NSMutableArray *ar = [NSMutableArray array];

        for(UIColor*cincolors) {

            [araddObject:(id)c.CGColor];

        }

        UIGraphicsBeginImageContextWithOptions(imgSize, YES, 1);

        CGContextRef context = UIGraphicsGetCurrentContext();

        CGContextSaveGState(context);

        CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);

        CGGradientRefgradient =CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar,NULL);

        CGPointstart;

        CGPointend;

        switch(gradientType) {

            case GradientTypeTopToBottom:

                start =CGPointMake(0.0,0.0);

                end =CGPointMake(0.0, imgSize.height);

                break;

            case GradientTypeLeftToRight:

                start =CGPointMake(0.0,0.0);

                end =CGPointMake(imgSize.width,0.0);

                break;

            case GradientTypeUpleftToLowright:

                start =CGPointMake(0.0,0.0);

                end =CGPointMake(imgSize.width, imgSize.height);

                break;

            case GradientTypeUprightToLowleft:

                start =CGPointMake(imgSize.width,0.0);

                end =CGPointMake(0.0, imgSize.height);

                break;

            default:

                break;

        }

        CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

        CGGradientRelease(gradient);

        CGContextRestoreGState(context);

        CGColorSpaceRelease(colorSpace);

        UIGraphicsEndImageContext();

        returnimage;

    }

    @end

    以上就是完整的UIColor分类了,到目前为止还不知道怎么在简书上面插入代码,有知道的朋友告知一下,谢谢!

    那下面就说说我是怎么使用这个的:

    渐变色设置

    注意上面注释了一行代码和注释那行代码上面的代码!!!

    这样子我就实现了颜色的渐变,而使用下面被注释掉的那行代码,即使用[_headview setBackgroundColor:[UIColor colorWithPatternImage:bgImg]];进行设置的时候,进行真机调试一点击输入框就闪退了,因为我手机上装的是搜狗输入法,个人不喜欢使用苹果原生的输入法,所以我就装了搜狗输入法,下面就是报错截图:

    报错截图

    就是说使用colorWithPatternImage方法产生的报错,那么既然是使用这个方法产生的报错,那当然就不能再使用这个方法了,要么就不要使用第三方输入法,可是我自己宁愿不使用colorWithPatternImage方法,也要使用第三方输入法,哈哈哈!其实使用colorWithPatternImage方法还会造成消耗内存大的现象,所以换方法成了必然。但是我又面临一个怎么设置背景颜色的渐变色问题了,那么网上的方法固然也很多,但是都没有很好解决我最关注的问题,所以我就只能另辟蹊径了,那么上面叫大家注意的代码就是完美实现了渐变色和设置背景颜色的问题,而且还不会出现使用第三方输入法出现APP闪退的问题。

    欢迎大家联系一起进步,QQ:834537795.

    相关文章

      网友评论

      • Cy_Star:插入代码,先换行,让前一行是空的,然按空格键几次后直接放入你的代码
        Cy_Star:@小蜜蜂Bee 就是在编辑博文的时候,对代码区域的编辑方式,你试试就知道效果了
        小蜜蜂Bee:???这是做什么?

      本文标题:图片UIImage方式实现渐变色UIColor的方法与***As

      本文链接:https://www.haomeiwen.com/subject/alnddftx.html