绘图时CAShapeLayer虚线

时间:2012-08-28 21:52:48

标签: iphone cashapelayer

我正在为应用添加一个简单的绘图功能,我希望用户能够绘制虚线。我有绘图例程正常工作,添加CAShapeLayer并设置路径。

但是,当我尝试绘制虚线时,只有当用户绘制非常快时,破折号才会显现。如果我画得很慢,那么这条线就会很稳固,因为破折号会聚集在一起。

步骤1.开始新的绘图图层。有些代码显然被遗漏了。

// CAShapeLayer
// Dashed pattern is arbitrary - I've tried a variety of values
[self.currentDrawLayer setLineDashPattern:[NSArray arrayWithObjects:
                                          [NSNumber numberWithInt:6],
                                          [NSNumber numberWithInt:12],
                                          nil]];

currentPenPath = [UIBezierPath bezierPath];    
[currentPenPath moveToPoint:currentPoint];

步骤2.在用户绘制并更新图层时添加点。

[currentPenPath addLineToPoint:currentPoint];
[currentPenPath moveToPoint:currentPoint];
[[self currentDrawLayer] setPath:currentPenPath.CGPath];

我希望用户能够以他们想要的速度或速度绘制​​,并在绘制时具有一致的破折号。我是否需要先消除所有要点?

用户绘制时是否有简单的方法来绘制破折号?

enter image description here

感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案 - 一个在绘图时也能正常工作的解决方案!

一些代码......

else if (sender.state == UIGestureRecognizerStateChanged)
{
    CGFloat distance = sqrtf(powf((point.x - currentPenPoint.x), 2) + powf((point.y - currentPenPoint.y), 2));

    if (distance > 20) // TODO: define magic number after some testing
    {
        currentPenPoint = point;
        [self drawPenLine];
    }

    <snip>
}

我引用了以下帖子: How to draw Smooth straight line by using UIBezierPath?

使用毕达哥拉斯我可以找到前一点之间的距离,如果足够远,我可以添加点并绘制线。这样,虚线均匀分布。