我为自定义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度,我该怎么做?
答案 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)