gpt4 book ai didi

ios - 在iOS和OSX之间共享CGColor

转载 作者:行者123 更新时间:2023-12-01 18:14:51 24 4
gpt4 key购买 nike

我正在为OSX和iOS编写核心图形跨平台库。

我正在从创建UIColor CGColor属性的现有iOS项目中移植它。
当然,UIColor在Mac上不可用。

那么在两个系统上使用相同颜色的正确方法是什么?
我应该获取所有先前使用的UIColor的rgb值并以编程方式创建CGColor,还是应该将代码分别与TARGET_OS_MACTARGET_OS_IPHONE ifdefs分开?

最佳答案

我的首选方法是完全避免UIColorNSColor,并尽可能使用CGColorRef

Core Animation是在iOS和OS X上绘制的最佳/最现代的方式。它期望CGColorRef对象,并且(相当)是跨平台的。

唯一的缺点是,作为较低级别的数据类型,ARC无法为您处理内存管理。但是手动内存管理并不难。

CGColorRef的用法:

CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat componennts[4] = {255, 255, 255, 255}; // white, with 100% opacity. Use {0,0,0,255} for black, or {255,0,0,127.5} for red with 50% opacity.
CGColorRef color = CGColorCreate(colorSpace, componennts);
CGColorSpaceRelease(space);

layer.backgroundColor = color; // layer is a CALayer object
CGColorRelease(color);

您可以通过将其存储在静态变量中来避免创建/释放颜色空间对象:
static CGColorSpaceRef colorSpace;

@implementation MyClass

+ (void)initialize
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
colorSpace = CGColorSpaceCreateDeviceRGB();
});
}

- (void)blah
{
CGFloat componennts[4] = {255, 255, 255, 255}; // white, with 100% opacity. Use {0,0,0,255} for black, or {255,0,0,127.5} for red with 50% opacity.
CGColorRef color = CGColorCreate(space, componennts);

layer.backgroundColor = color; // layer is a CALayer object
CGColorRelease(color);

关于ios - 在iOS和OSX之间共享CGColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23095636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com