如何将CAGradientLayer旋转180度?

时间:2010-09-07 12:11:50

标签: iphone ios objective-c core-animation

我为自定义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 个答案:

答案 0 :(得分:18)

您还可以更改渐变的起点和终点。默认startPoint为{0.5, 0.0}。默认endPoint为{0.5, 1.0}。翻转那些使你的渐变走另一条路。

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

将它们翻转以正常显示。

答案 1 :(得分: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,但它通常用于图层中的内容更改。

尽管如此,Vanya应用旋转变换的解决方案可能是实现这种效果的最快方法。

作为评论,希望您的代码后面某处有[locations release][colorNext release],否则您将泄露位置和颜色数组。

答案 2 :(得分:0)

for swift 3.0+

gradient.startPoint = CGPoint(x: 0.5, y: 1.0)
 gradient.endPoint = CGPoint(x: 0.5, y: 0.0)