如何更改渐变开始的程度

时间:2015-06-30 22:13:58

标签: ios objective-c gradient layer angle

我正在使用此存储库绘制渐变

https://github.com/paiv/AngleGradientLayer/blob/master/AngleGradient/AngleGradientLayer.m

我试图获得渐变开始的角度,以便改变。

左边的渐变是我目前所拥有的,右边是我想要达到的目标。

http://i.imgur.com/muUPD0U.png

我需要设法编辑代码,我通过使图层更大并旋转它得到了我想要的结果,但这意味着在屏幕上绘制更多像素,这是无效的。

提前致谢。

AngleGradientLayer *l = (AngleGradientLayer *)self.layer;

l.colors = [NSArray arrayWithObjects:
            (id)[UIColor colorWithRed:38.0 / 255.0 green:154.0 / 255.0 blue:151.0 / 255.0 alpha:1].CGColor,
            (id)[UIColor colorWithRed:231.0 / 255.0 green:210.0 / 255.0 blue:130.0 / 255.0 alpha:1].CGColor,
            (id)[UIColor colorWithRed:195.0 / 255.0 green:85.0 / 255.0 blue:82.0 / 255.0 alpha:1].CGColor,
            nil];


NSMutableArray *locations = [[NSMutableArray alloc] initWithCapacity:3];

self.value1 = [NSNumber numberWithFloat:(0.0)];
self.value2 = [NSNumber numberWithFloat:(0.5)];
self.value3 = [NSNumber numberWithFloat:(1.0)];

[locations addObject: self.value1];
[locations addObject: self.value2];
[locations addObject: self.value3];

l.locations = locations;

1 个答案:

答案 0 :(得分:0)

以下是我在AngleGradientLayer.m中修补angleGradient(...)函数的一些代码。

float offset = M_PI / 4;
float angle = atan2f(dirY, dirX) + offset;
while (angle < 0) angle += 2 * M_PI;
while (angle > 2 * M_PI) angle -= 2 * M_PI;
while (angle < 0) angle += 2 * M_PI;

它取代了这些行

    float angle = atan2f(dirY, dirX);
    if (dirY < 0) angle += 2 * M_PI;

通常,您希望将函数的参数和属性AngleGradientLayer设为偏移量。 offset处于辐射状态(0 ...2π)。如果你想按照逆时针逻辑移动,可以使用-offset。