【问题标题】:CGMutablePath.addArc not working in Swift 3?CGMutablePath.addArc 在 Swift 3 中不起作用?
【发布时间】:2016-08-21 07:30:42
【问题描述】:

在 Xcode 8 beta 6 中,一些添加路径的函数发生了变化,包括那些添加弧线的函数:

func addArc(center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool, transform: CGAffineTransform = default)

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

这是一个被更改破坏的函数:

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

【问题讨论】:

  • 它是如何“不工作”的?你会得到什么结果,你期望什么?
  • 只有一种方法“创建弧线”是行不通的,你不觉得吗?我什至包含了一个可以演示的函数。
  • 无法编译。它可能在运行时崩溃。它可能会为某些输入数据产生“错误”的路径。它可能会为所有输入数据生成错误的路径。

标签: ios swift xcode cgpath


【解决方案1】:

您的 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) 

【讨论】:

  • 哈哈哈我怎么错过了。呃,那些凌晨 3 点的忧郁。不错的收获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2018-01-13
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多