iOS-生成簡單的漸變圖片

.h

typedef NS_ENUM(NSUInteger, GradientType) {

GradientTypeTopToBottom = 0,//從上到下
GradientTypeLeftToRight = 1,//從左到右
GradientTypeUpleftToLowright = 2,//左上到右下
GradientTypeUprightToLowleft = 3,//右上到左下

};

@interface UIImage (EXtension)

  • (UIImage *)imageWithColor:(UIColor *)color;

/** 設置圖片的漸變色(顏色->圖片)

@param colors 漸變顏色數(shù)組 @param gradientType 漸變樣式 @param imgSize 圖片大小 @return 顏色->圖片
*/

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

@end

.m

import "UIImage+EXtension.h"

@implementation UIImage (EXtension)

//這個方法可以抽取到 UIImage 的分類中

  • (UIImage *)imageWithColor:(UIColor *)color
    {
    NSParameterAssert(color != nil);

    CGRect rect = CGRectMake(0, 0, 1, 1);
    // Create a 1 by 1 pixel context
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
    [color setFill];
    UIRectFill(rect); // Fill it with your color
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
    }

  • (UIImage )gradientColorImageFromColors:(NSArray)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize {
    NSMutableArray *ar = [NSMutableArray array];
    for(UIColor *c in colors) {
    [ar addObject:(id)c.CGColor];
    }
    UIGraphicsBeginImageContextWithOptions(imgSize, YES, 1);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar, NULL);
    CGPoint start;
    CGPoint end;
    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();
    return image;
    }

@end


屏幕快照 2019-10-21 下午5.54.41.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容