2010-09-07 80 views
4

我为我的自定义UIButton创建了CAGradientLayer。创建它的代码如下:如何将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,但它通常用于图层中的内容更改。这就是说,Vanya应用旋转变换的解决方案可能是实现这种效果的最快捷方式。

作为一个评论,希望你有一个[locations release][colorNext release]在你的代码稍后的地方,否则你会泄漏的位置和颜色数组。

17

您还可以更改渐变的开始点和结束点。默认startPoint是{0.5, 0.0}。默认的endPoint是{0.5, 1.0}。翻转这些以使您的渐变变成另一种方式。

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

翻转它们以正常显示。