0

我正在向应用程序添加一个简单的绘图功能,并且我希望用户能够绘制虚线。我的绘图程序工作得很好,添加了一个 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];

我希望用户能够随心所欲地画得慢或快,并在绘画时有一致的破折号。我需要先把所有的点都弄平吗?

有没有一种简单的方法可以在用户绘制时绘制破折号?

在此处输入图像描述

任何指导表示赞赏。

4

1 回答 1

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>
}

我引用了以下帖子: 如何使用 UIBezierPath 绘制平滑直线?

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

于 2012-08-29T00:08:08.230 回答