Как изменить цветные точки CAGradientLayer?

Прямо сейчас у меня есть слой Gradient GA, где я установил цвета, но я бы хотел установить цветную точку (вместо верхнего центра, вверху слева), а снизу - (вместо нижнего центра внизу справа), чтобы немного изменить ситуацию. Мысли? Ниже приведен код, который у меня до сих пор... Я включил базовую анимацию, потому что я анимация между цветами.

- (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;
}

Справа (что у меня есть) слева (что бы я хотел)

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

Ответ 1

Свойства startPoint и endPoint a CAGradientLayer определены в "единичной системе координат". В единичной системе координат:

  • (0,0) соответствует наименьшим координатам прямоугольника с границами слоев, который на iOS является его верхним левым углом, если слой не был преобразован;
  • (1,1) соответствует наибольшим координатам прямоугольника границ границ, который на iOS является его нижним правом углом, если слой не был преобразован.

Таким образом, упорядочение вашего градиента так, как вы хотите, должно быть таким простым:

gradient.startPoint = CGPointZero;
gradient.endPoint = CGPointMake(1, 1);