web-dev-qa-db-fra.com

Comment changer les points de couleur CAGradientLayer?

En ce moment, j'ai un GA calque de dégradé où j'ai défini les couleurs, mais je voudrais définir le point de couleur sur (au lieu du haut au centre, en haut à gauche) et en bas à (au lieu du bas du centre vers le bas à droite) juste pour changer un peu les choses. Réflexions? Ci-dessous le code que j'ai jusqu'à présent ... J'ai inclus l'animation de base parce que je suis une animation entre les couleurs.

- (id)init {
    self = [super init];

    UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.w, self.h)];
    [self addSubview:gradientView];
    [self sendSubviewToBack:gradientView];

    topColor = [UIColor colorWithRed:0.012 green:0.012 blue:0.012 alpha:1];
    bottomColor = [UIColor colorWithRed:1.000 green:0.765 blue:0.235 alpha:1];

    gradient = [CAGradientLayer layer];
    gradient.frame = gradientView.frame;
    gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
    gradient.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.7], nil];
    [gradientView.layer addSublayer:gradient];

    [self performSelector:@selector(animateColors) withObject:self afterDelay:2.0];
    currentColorCount = 1;
    return self;
}

A droite (ce que j'ai) à gauche (ce que j'aimerais)

On the right (What I've got) on the left (what I'd like)

30
user1940321

Les propriétés startPoint et endPoint d'un CAGradientLayer sont définies dans le "système de coordonnées d'unité". Dans le système de coordonnées d'unité:

  • (0,0) correspond aux plus petites coordonnées du rectangle de délimitation du calque, qui sur iOS est son coin supérieur gauche à moins que le calque n'ait été transformé;
  • (1,1) correspond aux coordonnées les plus grandes du rectangle des limites du calque, qui sur iOS est son coin inférieur droit, sauf si le calque a été transformé.

Ainsi, organiser votre dégradé comme vous le souhaitez devrait être aussi simple que cela:

gradient.startPoint = CGPoint.zero
gradient.endPoint = CGPoint(x: 1, y: 1)
106
rob mayoff