首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建梯度位置的CGFloat数组

创建梯度位置的CGFloat数组
EN

Stack Overflow用户
提问于 2013-10-26 05:29:04
回答 4查看 2.7K关注 0票数 1

我正在尝试从字典数组(colorArray2)中创建渐变颜色。本词典包含5个键: r,g,b,a,p.r,g,b,a是组件值(字符串),p是位置。我试图用initWithColors:atLocations:colorSpace.创建一个渐变颜色现在,我有以下几点。

代码语言:javascript
复制
NSGradient *aGradient;
NSColorSpace *space = [NSColorSpace genericRGBColorSpace];
NSMutableArray *cArray = [[NSMutableArray alloc] initWithObjects:nil]; // storing colors
NSMutableArray *pArray = [[NSMutableArray alloc] initWithObjects:nil]; // storing locations
for (NSInteger i2 = 0; i2 < colorArray2.count; i2++) {
    NSString *r = [[colorArray2 objectAtIndex:i2] objectForKey:key2a];
    NSString *g = [[colorArray2 objectAtIndex:i2] objectForKey:key2b];
    NSString *b = [[colorArray2 objectAtIndex:i2] objectForKey:key2c];
    NSString *a = [[colorArray2 objectAtIndex:i2] objectForKey:key2d];
    NSString *p = [[colorArray2 objectAtIndex:i2] objectForKey:key2e];
    NSColor *color = [NSColor colorWithSRGBRed:[r integerValue]/255.0f green:[g integerValue]/255.0f blue:[b integerValue]/255.0f alpha:[a integerValue]/100.0f];
    [cArray addObject:color];
    [pArray addObject:[NSNumber numberWithDouble:[p doubleValue]]];
}

所以我有一个包含颜色的数组(cArray)。我不知道的是如何创建一系列的位置。根据文档,位置是一个包含渐变中每种颜色的位置的CGFloat值数组。如何枚举要创建浮点数数组的内容?

谢谢你的帮助。

更新

更具体地说,我如何使pArray获得类似的

代码语言:javascript
复制
double d[] = {0.1, 0.2, 0.3, 0.5, 1.0};

这样我就可以

代码语言:javascript
复制
aGradient = [[NSGradient alloc] initWithColors:cArray atLocations:d colorSpace:space];
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-26 06:31:51

NSGradient文献声明locations参数应该是const CGFloat*类型,因此不能使用NSArray*。下列措施应能发挥作用:

代码语言:javascript
复制
// Allocate a C-array with the same length of colorArray2
CGFloat* pArray = (CGFloat*)malloc(colorArray2.count * sizeof(CGFloat));

for (NSInteger i2 = 0; i2 < colorArray2.count; i2++) {
    // Extract location
    NSString* p = [[colorArray2 objectAtIndex:i2] objectForKey:key2e];
    pArray[i2] = [p doubleValue];
}

// Do whaterver with pArray

...

// Remember to free it

free(pArray);
票数 0
EN

Stack Overflow用户

发布于 2014-01-19 11:40:05

您可以使用:

代码语言:javascript
复制
NSArray *colors = @[[NSColor colorWithWhite:.3 alpha:1.0],
                   [NSColor colorWithWhite:.6 alpha:1.0],
                   [NSColor colorWithWhite:.3 alpha:1.0]];
CGFloat locations[3] = {0.0, 0.5, 1.0};
NSGradient *gradient = [[NSGradient alloc] initWithColors:colors atLocations:locations colorSpace:[NSColorSpace genericRGBColorSpace]];
[gradient drawInRect:CGRectMake(100.0, 7.0, 10.0, 18.0) angle:-90];
票数 0
EN

Stack Overflow用户

发布于 2014-11-20 22:58:09

其他答案:不。就是没有。

实际答案:如何在目标c中生成CGFloats数组?

首先,这是目标C,而不是C。从技术上讲,您可以使用malloc,但这是一个非常可怕的攻击。您应该转换为NSNumber,然后可以填充NSArray。之后,您可以使用NSNumber的floatValue方法进行转换。这种方式是正确的目标-C。混合和匹配C和Obj只会创建意大利面代码,这是很难理解的,最终变得不可维护。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19603198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档