CGMutablePath.addArc在Swift 3中不起作用?

时间:2016-08-21 07:30:42

标签: ios swift xcode cgpath

在Xcode 8 beta 6中,添加路径的一些功能发生了变化,包括添加弧的功能:

public class func createHorizontalArcPath(_ startPoint:CGPoint, width:CGFloat, arcHeight:CGFloat, closed:Bool = false) -> CGMutablePath
    {
        // http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths

        let arcRect = CGRect(x: startPoint.x, y: startPoint.y-arcHeight, width: width, height: arcHeight)

        let arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) / (8*arcRect.size.height));
        let arcCenter = CGPoint(x: arcRect.origin.x + arcRect.size.width/2, y: arcRect.origin.y + arcRadius);

        let angle = acos(arcRect.size.width / (2*arcRadius));
        let startAngle = CGFloat(M_PI)+angle // (180 degrees + angle)
        let endAngle = CGFloat(M_PI*2)-angle // (360 degrees - angle)

        let path = CGMutablePath();
        path.addArc(center: arcCenter, radius: arcRadius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
        if(closed == true)
        {path.addLine(to: startPoint)}
        return path;
    }

除了该功能的定义之外,Apple网站上没有任何文档。我一直无法从这个函数得到一个实际的弧,并且一直依赖于使用切线的第二个版本。任何人都可以提供工作样品吗?可能只是被窃听?

这是一个被改变打破的功能:

{{1}}

1 个答案:

答案 0 :(得分:9)

您的Swift代码基于http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths的Objective-C代码, 弧形路径创建为

的位置
CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius,
             startAngle, endAngle, 0);

特别是,0作为参数传递给最后一个参数bool clockwise。这应该转换为Swift中的false,而不是true

path.addArc(center: arcCenter, radius: arcRadius,
            startAngle: startAngle, endAngle: endAngle, clockwise: false)