ios - ¿Cómo cambiar los puntos de color CAGradientLayer?
core-animation (1)
En este momento, tengo una capa de degradado GA en la que he establecido los colores, pero me gustaría establecer el punto de color en (en lugar de la parte central superior, en la parte superior izquierda) y la parte inferior en (en lugar de la parte inferior central en la parte inferior derecha). ) Sólo para cambiar las cosas un poco. ¿Pensamientos? A continuación se muestra el código que tengo hasta ahora ... Incluí animación central porque soy animación entre colores.
- (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 la derecha (Lo que tengo) A la izquierda (Lo que me gustaría)
Las propiedades startPoint
y endPoint
de un CAGradientLayer
se definen en el "sistema de coordenadas de la unidad". En el sistema de coordenadas de la unidad:
-
(0,0)
corresponde a las coordenadas más pequeñas del rectángulo de límites de la capa, que en iOS es la esquina superior izquierda a menos que la capa se haya transformado; -
(1,1)
corresponde a las coordenadas más grandes del rectángulo de los límites de la capa, que en iOS es la esquina inferior derecha a menos que la capa se haya transformado.
Por lo tanto, organizar su gradiente de la forma que desee debe ser así de simple:
gradient.startPoint = CGPointZero;
gradient.endPoint = CGPointMake(1, 1);