2012-03-29 1 views
1

j'ai commencé à utiliser le CAGradientLayer mais mon application se bloquePourquoi le crash de l'application lors de l'utilisation CAGradientLayer

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = headerView.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor redColor],(id)[UIColor greenColor], nil]; 

[headerView.layer addSublayer:gradient]; 

EXEC_BAD_ACESS

Y at-il une erreur dans ma mise en œuvre?

Répondre

4

Il est un petit bug - vous devez utiliser et tableau de pointeurs CGColorRef:

gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor greenColor] CGColor], nil]; 
+0

Merci beaucoup, y a-t-il une raison pour que cela ne soit pas validé lors de la compilation? – Alexidze

+0

C'est une bonne question - Objective-C utilise un runtime dynamique, donc lors de la création d'un tableau, le compilateur ne se soucie pas vraiment de * quoi * dans le tableau. Ce sont ces types de contrôles de cohérence que nous perdons lorsque nous utilisons un moteur d'exécution dynamique, mais ça vaut le coup :) –

2

CAGradientLayer utilisent des valeurs CGColorRef. Utilisez la propriété CGColor pour UIColor. Exemple:

[UIColor redColor].CGColor 
Questions connexes