1

辞書の配列 (colorArray2) からグラデーション カラーを作成しようとしています。この辞書には、r、g、b、a、p の 5 つのキーが含まれています。r、g、b、a はコンポーネント値 (文字列) で、p は場所です。initWithColors:atLocations:colorSpaceでグラデーションカラーを作成しようとしています。今のところ、私は以下を持っています。

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 値の配列です。float 配列を作成するために何でも列挙するにはどうすればよいですか?

ご協力ありがとうございました。

アップデート

より具体的には、 pArray を作成して次のようなものを取得するにはどうすればよいですか

double d[] = {0.1, 0.2, 0.3, 0.5, 1.0};

私が持つことができるように

aGradient = [[NSGradient alloc] initWithColors:cArray atLocations:d colorSpace:space];
4

4 に答える 4

0

わかった。

NSInteger count,index;
double *dArray;

count = pArray.count;
dArray = (double *) malloc(sizeof(double) * count);
for (index = 0; index < count; index++) {
    dArray[index] = [[pArray objectAtIndex:index] floatValue];
}

aGradient = [[NSGradient alloc] initWithColors:cArray atLocations:dArray colorSpace:space];
于 2013-10-26T06:32:31.897 に答える
0

NSGradient のドキュメントには、locationsパラメーターのタイプは である必要があると記載されているconst CGFloat*ため、使用できませんNSArray*。以下が機能するはずです。

// 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);
于 2013-10-26T06:31:51.943 に答える
0

他の答えへ:いいえ。いいえ。

実際の答え: 目的 c で CGFloats の配列を作成するにはどうすればよいですか?

まず第一に、これは C ではなく、Objective-C です。技術的には malloc を使用できますが、これは本当にひどいハックです。に変換する必要があります。NSNumberその後、 に入力できますNSArrayfloatValueその後、NSNumber のメソッドを使用して元に戻すことができます。この方法は適切な Objective-C です。C と Obj-C を組み合わせて使用​​すると、読みにくく、最終的には保守が困難になるスパゲッティ コードが作成されます。

于 2014-11-20T22:58:09.403 に答える