Как мне повернуть CAGradientLayer на 180 градусов? - PullRequest
5 голосов
/ 07 сентября 2010

Я создал CAGradientLayer для своих пользовательских UIButton с. Код для его создания выглядит следующим образом:

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = btn.bounds;
gradient.cornerRadius = 10.0f;
locations=[[NSArray alloc] initWithObjects: LOC_0, LOC_5, LOC_51,LOC_1, nil]; 
[gradient setLocations:locations];
colorNext=[[NSArray alloc] initWithObjects:(id) G3_rgb1, (id) G3_rgb2, (id) G3_rgb3, (id) G3_rgb4, nil]; 
gradient.colors = colorNext;

[btn.layer insertSublayer:gradient atIndex:0];

Мой вопрос: при нажатии кнопки мне нужно изменить градиентный вид кнопки на 180 градусов, как мне это сделать?

Ответы [ 3 ]

18 голосов
/ 10 сентября 2010

Вы также можете изменить начальную и конечную точки вашего градиента.Начальная точка по умолчанию - {0.5, 0.0}.Конечной точкой по умолчанию является {0.5, 1.0}.Переверните их, чтобы ваш градиент пошел другим путем.

[gradient setStartPoint:CGPointMake(0.5, 1.0)];
[gradient setEndPoint:CGPointMake(0.5, 0.0)];

Переверните их, чтобы отобразить в обычном режиме.

2 голосов
/ 07 сентября 2010

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

NSArray *newLocations = [[NSArray alloc] initWithObjects: [NSNumber numberWithFloat:(1.0 - [LOC_0 floatValue])], [NSNumber numberWithFloat:(1.0 - [LOC_5 floatValue])], [NSNumber numberWithFloat:(1.0 - [LOC_51 floatValue])], [NSNumber numberWithFloat:(1.0 - [LOC_1 floatValue])], nil]; 
[gradient setLocations:newLocations];
[newLocations release];

[gradient setNeedsDisplay];

(это было бы чище, если бы у вас были значения с плавающей запятой для LOC_0 и т. Д.)

Я не уверен, требуется ли -setNeedsDisplay, но часто для изменений содержимого в слое.

Тем не менее, решение Вани о применении вращательного преобразования может быть самым быстрым способом достижения этого эффекта.

В качестве комментария, надеюсь, у вас есть код [locations release] и [colorNext release] где-то позже в вашем коде, в противном случае вы будете вытекать из локаций и цветовых массивов.

0 голосов
/ 01 мая 2018

для swift 3.0+

gradient.startPoint = CGPoint(x: 0.5, y: 1.0)
 gradient.endPoint = CGPoint(x: 0.5, y: 0.0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...