2010-09-07 3 views
4

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

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 градусов, как я должен это сделать?

ответ

2

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

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] где-то позже в вашем коде, иначе вы будете утечка местоположений и цветных массивов.

17

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

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

Отверните их обратно, чтобы нормально отображаться.

Смежные вопросы