0 votes

Confusion des couches de l'iPhone

J'essaie de faire quelque chose qui devrait être très simple. Je veux ajouter un dégradé à l'une de mes vues. Je peux l'ajouter à self.view, mais pas à viewWithGradient. Voici le code :

CAGradientLayer *gradient = [CAGradientLayer layer];

UIColor *colorFirst     = [UIColor colorWithWhite:0.10 alpha:0.15];
UIColor *colorLast   = [UIColor colorWithWhite:0.535 alpha:0.8];
NSArray *colors =  [NSArray arrayWithObjects:(id)colorFirst.CGColor, colorLast.CGColor, nil];
gradient.colors = colors;

NSNumber *stopFirst  = [NSNumber numberWithFloat:0.00];
NSNumber *stopLast  = [NSNumber numberWithFloat:1.00];
NSArray *locations = [NSArray arrayWithObjects:stopFirst, stopLast, nil];
gradient.locations = locations;
gradient.frame = CGRectMake(0.0, viewWithGradient.frame.origin.y, viewWithGradient.frame.size.width, height_of_gradient);

[self.view.layer addSublayer:gradient]; // this works.  I get a nice gradient at 
                    // the bottom of the view, where I want it, 
                    // but I need the gradient further down in 
                    // my view hierarchy.
//  [viewWithGradient.layer addSublayer:gradient]; // this doesn't.  There
                    //  is no visually noticeable change
                    //  if this is uncommented and the
                    //  above line is.

viewWithGradient est une petite vue à l'intérieur de ma vue principale dans un viewController (self.view). Il n'y a qu'une seule autre vue au-dessus de cette viewWithGradient. Il s'agit d'un UILabel, qui n'occupe qu'environ la moitié de la surface de viewWithGradient. L'arrière-plan est transparent, mais l'étiquette affiche son texte en blanc. J'ai besoin que le dégradé soit sous l'UILabel, et non sur self.view, au-dessus de l'UILabel.

Je soupçonne actuellement que mon cadre/mes limites peuvent placer le dégradé hors de l'écran. Quelqu'un voit-il quelque chose qui m'échappe ? Cela semble être la plus simple des utilisations de CALayer, et j'ai passé beaucoup trop de temps dessus.

0voto

Neil Mix Points 811

La coordonnée y du cadre de votre dégradé est viewWithGradient.frame.origin.y . Vouliez-vous vraiment 0 ? Si viewWithGradient se trouve à plus de la moitié de l'écran, votre dégradé sera dessiné en dehors de l'écran.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X