如何使用带梯度的UIBezierPath绘制多点线

时间:2012-06-16 16:39:03

标签: objective-c path drawing line gradient

我需要绘制很多行。

我正在使用UIBezierPath绘制线条和小的5x10图案图像用于渐变。 以下是代码的一部分:

 l1 = [UIBezierPath bezierPath];
    [l1 moveToPoint:CGPointMake(76, 373)];  
    [l1 addLineToPoint:CGPointMake(940, 373)];   


    CAShapeLayer *pathLayer = [CAShapeLayer layer];
    CGRect pathRect = self.view.frame;

    path = l1;
    pathLayer.frame = self.view.bounds;
    pathLayer.bounds = pathRect;
    pathLayer.geometryFlipped = NO;
    pathLayer.path = path.CGPath;
    pathLayer.strokeColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"line1Pattern.png"]];
    pathLayer.fillColor = nil;
    pathLayer.lineWidth = 8.0f;
    pathLayer.opacity = 1;
    [pathLayer setShadowOffset:CGSizeMake(0, 5)];
    [pathLayer setShadowOpacity:0.5];
    pathLayer.lineCap = kCALineCapRound;
    pathLayer.lineJoin = kCALineJoinRound;
    [pathArray addObject:pathLayer];

    self.pathLayer = pathLayer;

如果直线是水平的(如蓝色和红色) - 一切都很好,效果很好。 但是,如果我绘制倾斜线,或直线然后平铺 - 结果不好。 这是图像链接:左侧 - 我需要什么,右侧 - 结果是什么:example

所以,据我所知 - 我需要旋转渐变以匹配线条。但我无法想象如何实现这一点。

此外,有些线条可能具有锯齿形状,如图所示:example

有人可以帮我解决这个问题吗?或者建议另一种绘制线条的方法。 谢谢!

1 个答案:

答案 0 :(得分:1)

您只能绘制水平线并使用变换旋转它们。但如果你需要一条曲线,那么一切都会复杂得多。

此外,您可以创建渐变并绘制它而不是平铺图像。