【CoreGraphics】CGColor - CG颜色

创建

  • 一般创建
    // RGBA 色彩 (显示3色)
    CGColorSpaceRef rgbSapceRef = CGColorSpaceCreateDeviceRGB();// RGB 色彩空间
    CGFloat rgbComponents[] = {1, 0, 0, 1};// RGBA 颜色组件
    CGColorRef rgbColorRef = CGColorCreate(rgbSapceRef, rgbComponents);// 一般创建 CGColor
    
  • 模式创建 - 有颜色填充
- (void)awakeFromNib {
    //颜色空间
     CGColorSpaceRef colorSpace = CGColorSpaceCreatePattern(NULL);

    //填充模式回调函数结构体
    CGPatternCallbacks callback = {0,&drawPatternCallback, &releaseInfoCallback};

    /*填充模式
     info://传递给callback的参数
     bounds:瓷砖大小
     matrix:形变
     xStep:瓷砖横向间距
     yStep:瓷砖纵向间距
     tiling:贴砖的方法(瓷砖摆放的方式)
     isClored:绘制的瓷砖是否已经指定了颜色(对于无颜色瓷砖此处指定位false)
     callbacks:回调函数
     */
    CGPatternRef pattern = CGPatternCreate(NULL,
                                           CGRectMake(0, 0, 2 * TILE_SIZE, 2 * TILE_SIZE),
                                           CGAffineTransformIdentity,
                                           2 * TILE_SIZE,
                                           2 * TILE_SIZE,
                                           kCGPatternTilingNoDistortion,
                                           false,
                                           &callback);
    
    CGFloat alpha = 0.8;
    //注意最后一个参数对于无颜色填充模式指定为当前颜色空间颜色数据
    
    CGColorRef ref = CGColorCreateWithPattern(colorSpace, pattern, &alpha);
    self.backgroundColor = [UIColor colorWithCGColor:ref];
    
    CGColorSpaceRelease(colorSpace);
    CGPatternRelease(pattern);
}

#pragma mark - 无颜色填充模式

// 绘制 回调
void drawPatternCallback(void *info, CGContextRef context) {
    //有颜色填充,这里设置填充色
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1);
    CGContextFillRect(context, CGRectMake(0, 0, TILE_SIZE, TILE_SIZE));// 需要填充颜色的 位置
    CGContextFillRect(context, CGRectMake(TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE));// 同上
}

// 移除 回调
void releaseInfoCallback(void *info) {
    // 一般 传  NULL
}
  • 模式创建 - 无颜色填充

- (void)awakeFromNib {
    
        //设备无关的颜色空间(就是后面用于填充的颜色空间)
        CGColorSpaceRef rgbSpace = CGColorSpaceCreateDeviceRGB();
        
        //模式填充颜色空间
        CGColorSpaceRef colorSpace = CGColorSpaceCreatePattern(rgbSpace);
        
    
        //填充模式回调函数结构体
        CGPatternCallbacks callback = {0, &drawPatternCallback, &releaseInfoCallback};
        /*填充模式
         info://传递给callback的参数
         bounds:瓷砖大小
         matrix:形变
         xStep:瓷砖横向间距
         yStep:瓷砖纵向间距
         tiling:贴砖的方法(瓷砖摆放的方式)
         isClored:绘制的瓷砖是否已经指定了颜色(对于无颜色瓷砖此处指定位false)
         callbacks:回调函数
         */
        CGPatternRef pattern = CGPatternCreate(NULL,
                                             CGRectMake(0, 0, 2 * TILE_SIZE, 2 * TILE_SIZE),
                                             CGAffineTransformIdentity,
                                             2 * TILE_SIZE,
                                             2 * TILE_SIZE,
                                             kCGPatternTilingNoDistortion,
                                             false,
                                             &callback);
        
        CGFloat components[] = {1.0, 0.0, 0.0, 1.0};
        //注意最后一个参数对于无颜色填充模式指定为当前颜色空间颜色数据
 
        CGColorRef ref = CGColorCreateWithPattern(colorSpace, pattern, components);
        self.backgroundColor = [UIColor colorWithCGColor:ref];
    
        
        // 移除
        CGColorSpaceRelease(rgbSpace);
        CGColorSpaceRelease(colorSpace);
        CGPatternRelease(pattern);
    }

#pragma mark - 无颜色填充模式

// 绘制 回调
void drawPatternCallback(void *info, CGContextRef context) {
    CGContextFillRect(context, CGRectMake(0, 0, TILE_SIZE, TILE_SIZE));// 需要填充颜色的 位置
    CGContextFillRect(context, CGRectMake(TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE));// 同上
}

// 移除 回调
void releaseInfoCallback(void *info) {
    // 一般 传  NULL
}

  • copy 创建
    CGColorRef copyColorRef = CGColorCreateCopy(rgbColorRef);
    CGColorRef copyColorRef2 = CGColorCreateCopyWithAlpha(rgbColorRef, 0.5);
    CGColorRef copyColorRef3 = CGColorCreateCopyByMatchingToColorSpace(rgbSapceRef,
                                                                       kCGRenderingIntentDefault,
                                                                       rgbColorRef,
                                                                       nil);

操作

    CGColorRef retainColorRef = CGColorRetain(rgbColorRef);
    CGColorRelease(retainColorRef);

获取属性

名称很好认

    
    BOOL equalColor = CGColorEqualToColor(rgbColorRef, [UIColor redColor].CGColor);

    size_t numberOfComponens = CGColorGetNumberOfComponents(rgbColorRef);
    
    const CGFloat *componts = CGColorGetComponents(rgbColorRef);
    
    CGFloat alpha = CGColorGetAlpha(rgbColorRef);
    
    CGColorSpaceRef shapeRef = CGColorGetColorSpace(rgbColorRef);
    
    CGPatternRef patternRef = CGColorGetPattern(rgbColorRef);
    

1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,752评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,975评论 6 342
  • --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益...
    韩七夏阅读 2,807评论 2 10
  • 喵由于上两辈子的虚度和懵懂,加之在关键时刻的错误选择,使自己陷入了深深的财务泥潭。为了早日摆脱困境,它带着自己的清...
    驼铃星阅读 100评论 0 0