Changer un Fond Dégradé de couleur de la couche de UiView IOS à l'aide de CAGradientLayer classe

je veux changer la couleur de mon fond dégradé quand j'déclencher une action.
J'ai essayé par beaucoup comme sans succès.

BackgroundLayer.h

    #import <Foundation/Foundation.h>
    #import <QuartzCore/QuartzCore.h>

    @interface BackgroundLayer : NSObject

    +(CAGradientLayer*) greyGradient;
    +(CAGradientLayer*) blueGradient;

    @end

BackgroundLayer.m

@implementation BackgroundLayer
//Metallic grey gradient background
+ (CAGradientLayer*) greyGradient {
UIColor *colorOne = [UIColor colorWithWhite:0.9 alpha:1.0];
UIColor *colorTwo = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.85 alpha:1.0];
UIColor *colorThree     = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.7 alpha:1.0];
UIColor *colorFour = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.4 alpha:1.0];
NSArray *colors =  [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, colorThree.CGColor, colorFour.CGColor, nil];
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:0.02];
NSNumber *stopThree     = [NSNumber numberWithFloat:0.99];
NSNumber *stopFour = [NSNumber numberWithFloat:1.0];
NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, stopThree, stopFour, nil];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
return headerLayer;
}
//Blue gradient background
+ (CAGradientLayer*) blueGradient {
UIColor *colorOne = [UIColor colorWithRed:(120/255.0) green:(135/255.0) blue:(150/255.0) alpha:1.0];
UIColor *colorTwo = [UIColor colorWithRed:(57/255.0)  green:(79/255.0)  blue:(96/255.0)  alpha:1.0];
NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil];
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:1.0];
NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
return headerLayer;
}
@end

De mon point de vue contrôleur, j'ai un interrupteur de proximité (je travaille avec ibeacon).
le commutateur de 4 cas. je veux le Cas 1(de Loin) avec dégradé de bleu. Cas 2(à Proximité) avec barre de dégradé de gris. Je l'initialiser avec la couche "(void)viewWillAppear:(BOOL)animé" et puis j'ai essayé que dans le gamme délégué :

case CLProximityFar:
{
[[[self.view.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
self.bgLayer = [BackgroundLayer blueGradient];
self.bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:self.bgLayer atIndex:0];
....

pas de travail.
j'ai aussi essayé comme ceci

case CLProximityNear:
{
[[[self.view.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
CAGradientLayer *gradient = [[self.view.layer sublayers] firstObject];
gradient = [BackgroundLayer blueGradient];
[self.view.layer insertSublayer:gradient atIndex:0];
[self.view.layer setNeedsDisplay];
....

Pas de travail.

Quelqu'un peut m'aider ? j'ai besoin d'une solution pour changer la couleur de fond quand je m sur la "proximité" et de rechange en arrière quand je m "loin".

Merci d'avance pour votre aide.

Que signifie "ne fonctionne pas"? Le gradient de ne pas passer? Est la bonne affaire instruction en cours d'exécution?
oui, la bonne affaire est exécuté, mais la couleur change pas. Ou quand j'ai enlever la couche j'ai des erreurs. Les éléments de mon point de vue diseapears et la couleur changent pas. Désolé pour mon mauvais anglais, je m un français.
Si votre couche est elle-même le dessin de rien du tout, votre sous-couche sera tiré sur le dessus de cela. Ceci est similaire au comportement vu lors de l'ajout d'une sous-vue de vue: n'importe quel indice vous de l'insérer à l', il couvre toujours le superview. Ce que vous voulez probablement à faire est d'ajouter une sous-vue pour votre self.view où vous conservez tous vos contenus et puis il suffit de changer la couche de self.view de la pente.
Manquant le cadre de la couche?
Larme, non je n'ai pas un écran noir, je vois la couleur, mais il ne le changent pas. Ou avec une autre solution, j'ai le contenu manquant.

OriginalL'auteur mad_mask | 2015-02-04