【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

你可能感兴趣的:(【CoreGraphics】CGColor - CG颜色)