我正在使用SKShapeNodes通过在用户触摸屏幕时更新路径属性来动态绘制线条。 一旦线完成,我想在路径的末尾附加一条新的固定长度垂直线。

我已经调查了CGAffineTransform以根据路径的终点旋转新行,但到目前为止还没有任何运气。 任何提示或见解将非常感激。

我目前的一些参考代码如下:

        - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch* touch = [touches anyObject];
        CGPoint positionInScene = [touch locationInNode:self];

        //add a line to the new coordinates the user moved to
        CGPathAddLineToPoint(pathToDraw, NULL, positionInScene.x, positionInScene.y);
    }


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//create local copy of path
CGPathRef myPath_ = pathToDraw;

CGPoint myPoint = CGPathGetCurrentPoint(pathToDraw);

//create rectangle to append to end of line        
CGRect newRect = CGRectMake(myPoint.x, myPoint.y, 25, 3);
CGPathRef newPath = CGPathCreateWithRect(newRect, NULL);

//add new line to the end of the path
CGPathAddPath(newPath, NULL, myPath_);

//set shape node path to drawn path        
lineNode.path = myPath_;
}

===============>>#1 票数:3 已采纳

要获得垂直,您可以将向量指向最后一个线段的方向,然后交换x和y,并反转其中一个。 像这样的东西:

CGPoint v = { currentPoint.x - lastPoint.x, currentPoint.y - lastPoint.y };
CGPoint perp;
if (v.x == 0)
{
    perp.x = -v.y;
    perp.y = v.x;
}
else
{
    perp.x = v.y;
    perp.y = -v.x;
}

现在你可以在perp方向画一条线,从当前点开始,如下所示:

CGPathMoveToPoint (somePath, currentPoint);
CGPathAddLineToPoint (somePath, NULL, currentPoint.x + perp.x * length, currentPoint.y + perp.y * length);

其中length是您要绘制的线段的长度。

并且不要忘记将lastPoint设置为currentPoint以便下一次正确:

lastPoint = currentPoint;

  ask by user3552953 translate from so

未解决问题?本站智能推荐:

2回复

如何创建椭圆CGPathRef?

我是可可核心图形的新手。 我有一张鸡蛋的图片,并且正在使用Sprite套件模拟鸡蛋自由落体的物理过程。 我需要设置鸡蛋的physicsBody属性。 如何为此创建椭圆CGPathRef? 对于蛋形路径,我必须创建一半的圆形和一半的椭圆形。 怎么做?
1回复

创建CGPathRef的大纲

我有一个由n个重叠矩形创建的CGPath。 是否有API来获取原始轮廓的新路径? 或者可以通过填充原始路径或创建剪切路径来做一些聪明的事情? 如果没有这个,你能为布尔路径操作背后的数学推荐一个可靠的参考(在线或书籍)吗? 编辑:为清晰起见添加插图 例如,4个重叠的矩形:
1回复

如何用CGPathRef创建蛋形物理体?

我必须创建一个CGPathRef来模拟Sprite Kit中的物理属性。 我试图通过一半的圆形加上一半的椭圆形来创建一个蛋形路径。 鸡蛋比例为0.4(半圆底部)至0.6(半椭圆形上部); 但是,我不知道为什么一无所获。 以下代码是创建路径:
1回复

文字的CGPathRef

我们如何获得特定字符串的路径? 我刚刚发现CTFontCreatePathForGlyph将提供CGPathRef ,但它将是文本的轮廓。 例如,字母“ O”是我从上述方法获得的路径,就像一个带圆圈的圆。.看看我们如何绘制字母“ O”只是一个圆。 我希望以上详细信息足以理解我的问题。让我知
2回复

来自字符串的CGPathRef

请怎样才能得到法国信的特定阿拉伯语的路径? 我刚刚发现CTFontCreatePathForGlyph会给CGPathRef,但它将是文本的轮廓。 我需要这个真正的文本路径来显示文本绘制动画.. 请帮忙
2回复

在CGPathRef中检查CGPoint数量的最有效方法

我想知道我的CGMutablePathRef是否超过3分! 这种检查将经常发生,因此我正在寻找有效的解决方案。 我需要这样做的原因是因为在我的项目中用户绘制了形状。 当用户拖动他/她的手指时,会在路径上添加CGPoint(手指的当前位置),并在调用touchEnded:时添加物理实体。
1回复

CGPathMoveToPoint在创建路径时遇到一些麻烦[重复]

这个问题在这里已有答案: 为什么'nil'与Swift 3中的'UnsafePointer <CGAffineTransform>不兼容? 2个答案 我使用以下代码从CGPoint array()创建路径。 但它总是最终向我显示以下错误:
2回复

由CGPathAddArc创建的圆弧中心具有不一致的坐标

我有一个自定义UIControl,看起来像: 白色环在drawRect中绘制如下: 黑色圆圈是CAShapeLayer ,绘制如下: 我已经能够在白色环上的任何地方实现黑色圆圈的拖动。 当我让黑色圆圈移动时,我希望能够将黑色圆圈设置为环上某个位置的动画。 当手指从圆圈
1回复

从没有图形上下文的2D点创建几何路径。 在iOS中可能吗?

我需要一种方法来测试我的代码中的一些繁重的数学功能,并且到了需要验证此类代码是否正常工作的地步。 我希望能够基于点数组创建路径并将该路径用于没有图形上下文的测试。 例如,Java有各种类,例如Path2D类 ,它完全独立于任何种类的上下文或视图,除非您需要在某种图形上下文中显示信息。
3回复

如何获取在CGPath的CGContextSetLineDash之后创建的每个虚线的最后一点

我将路径转换为虚线以获取CGPATH的多个段。 在visitdashedpath中,我试图找到上一条(每条)虚线的终点。 我想通过处理完成的虚线来了解最后一点的坐标(dasharray [index-1] .endpoint),我尝试了CGPathGetCurrentPoint,