2010-09-07 5 views
4

J'ai créé un CAGradientLayer pour mon UIButton s. Le code pour la création est comme suit:Comment faire pivoter un CAGradientLayer de 180 degrés?

CAGradientLayer *gradient = [CAGradientLayer layer]; 

gradient.frame = btn.bounds; 
gradient.cornerRadius = 10.0f; 
locations=[[NSArray alloc] initWithObjects: LOC_0, LOC_5, LOC_51,LOC_1, nil]; 
[gradient setLocations:locations]; 
colorNext=[[NSArray alloc] initWithObjects:(id) G3_rgb1, (id) G3_rgb2, (id) G3_rgb3, (id) G3_rgb4, nil]; 
gradient.colors = colorNext; 

[btn.layer insertSublayer:gradient atIndex:0]; 

Ma question est: sur la presse du bouton que je dois changer la vue gradient du bouton de 180 degrés, comment dois-je faire?

Répondre

2

Tant que vous maintenez un pointeur vers la couche de gradient, vous devriez être en mesure d'inverser l'ordre des couleurs de gradient en fournissant un ensemble d'emplacements inversé:

NSArray *newLocations = [[NSArray alloc] initWithObjects: [NSNumber numberWithFloat:(1.0 - [LOC_0 floatValue])], [NSNumber numberWithFloat:(1.0 - [LOC_5 floatValue])], [NSNumber numberWithFloat:(1.0 - [LOC_51 floatValue])], [NSNumber numberWithFloat:(1.0 - [LOC_1 floatValue])], nil]; 
[gradient setLocations:newLocations]; 
[newLocations release]; 

[gradient setNeedsDisplay]; 

(ce serait plus propre si vous aviez le valeurs flottantes pour LOC_0, etc.)

Je ne suis pas sûr si le -setNeedsDisplay est requis, mais c'est souvent pour les changements de contenu dans un calque. Cela dit, la solution de Vanya consistant à appliquer une transformation par rotation peut être le moyen le plus rapide d'obtenir cet effet.

Comme un commentaire, j'espère que vous avez un [locations release] et [colorNext release] quelque part plus tard dans votre code, sinon vous fuire les emplacements et les tableaux de couleurs.

17

Vous pouvez également modifier les points de début et de fin de votre dégradé. Le point de départ par défaut est {0.5, 0.0}. Le point de terminaison par défaut est {0.5, 1.0}. Retournez les pour faire évoluer votre dégradé dans l'autre sens.

[gradient setStartPoint:CGPointMake(0.5, 1.0)]; 
[gradient setEndPoint:CGPointMake(0.5, 0.0)]; 

Retournez-les pour afficher normalement.

Questions connexes