我正在为应用添加一个简单的绘图功能,我希望用户能够绘制虚线。我有绘图例程正常工作,添加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];
我希望用户能够以他们想要的速度或速度绘制,并在绘制时具有一致的破折号。我是否需要先消除所有要点?
用户绘制时是否有简单的方法来绘制破折号?
感谢任何指导。
答案 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?
使用毕达哥拉斯我可以找到前一点之间的距离,如果足够远,我可以添加点并绘制线。这样,虚线均匀分布。