2009-09-28 4 views
0

Je travaille avec CGLayers et ses constantes mode de fusion, comme kCGBlendModeDifference, kCGBlendModeHardLight, kCGBlendModeLuminosity, etc.IPHONE: Comment construire et utiliser et tableau de constantes spéciales?

Je voudrais construire un tableau de ces constantes et les utiliser par index, dans une instruction comme

CGContextSetBlendMode(context, [myArrayOfBlendModes objectAtIndex:x]); 

mais j'ai deux problèmes ici:

1) Objective-C ne permettra pas de construire un tableau en utilisant

NSMutableArray * myArrayOfBlendModes = [[[NSMutableArray alloc] initWithObjects: 
kCGBlendModeDifference, 
kCGBlendModeHardLight, 
kCGBlendModeLuminosity, 
nil] autorelease]; 

car ces constantes ne sont pas des objets. Pour rendre les choses pires, ces constantes renvoient des valeurs CGBlend ...

Ainsi, le premier point est de savoir comment faire un tableau de CGBlends ...

2) si cela est possible, sera

[myArrayOfBlendModes objectAtIndex:x] 

retourner une valeur valide qui peut être utilisé sur

CGContextSetBlendMode(context, [myArrayOfBlendModes objectAtIndex:x]); 

???

et il y a une autre question ici .. un code objectif-c utilisé comme argument pour une routine C ... est-ce possible?

Ce sont deux énigmes que je suis en train de résoudre pendant des heures ...

Merci pour toute aide

Répondre

3

Ces constantes sont ints, pour autant que je peux dire. Si vous voulez vraiment ce genre de fonctionnalités que vous pouvez faire quelque chose comme:

modes CGBlendMode [] = { kCGBlendModeDifference, kCGBlendModeHardLight, kCGBlendModeDifference};

Ou, si vous voulez vraiment vraiment utiliser NSArray de, vous pouvez simplement jeter ceux-ci dans un NSNumber ...

NSNumber * lumineux = [NSNumber numberWithInt: kCGBlendModeDifference], * différence = [ NSNumber numberWithInt: kCGBlendModeDifference], * hardLight = [NSNumber numberWithInt: kCGBlendModeHardLight];

NSMutableArray * myArrayOfBlendModes = 

[[[NSMutableArray alloc] initWithObjects: différence, HARDLIGHT, lumineux, nul] autorelease];

CGContextSetBlendMode(context, [[myArrayOfBlendModes objectAtIndex:x] 

intValeur]);

+0

merci. Je pensais supposer que les CGBlends étaient une sorte de variable non entière et je me demandais comment créer un tableau aussi bizarre de "cgblends" ... merci. – SpaceDog

+0

J'utiliserais un tableau C normal comme l'a mentionné @Alex C Schaefer. Comme pour passer un code C obj à une fonction C ... pourquoi? Qu'est-ce que la routine C va faire avec le "code" obj C? Par code, voulez-vous dire une méthode Obj C? Si vous voulez qu'une routine C appelle une méthode obj C, alors vous devez également passer l'objet à la routine. Une méthode obj C n'a aucun sens en C sans son objet. Veuillez clarifier ce que vous essayez de faire ici, peut-être que nous pouvons vous aider. – mahboudz

+0

c'est tout. Je faisais quelque chose de mal et maintenant c'est clair. Merci. – SpaceDog

0

Et oui, vous pouvez utiliser un appel obj-c pour alimenter une fonction c. Les objectifs C et C sont la même danse - l'objectif C étant juste un surensemble de C.Il va exécuter la méthode et renvoyer le résultat à l'appel de la fonction c aucun problème.

+0

En tant qu'argument d'une routine C? Je ne sais pas comment vous envisagez cela. – mahboudz

Questions connexes