无与预期的参数类型不兼容CGAffineTransform

问题描述:

我想绘制一条路径:CGMutablePath但我在添加路径时遇到问题。无不是与预期的参数类型兼容'UnsafePointer'CGAffineTransform'无与预期的参数类型不兼容CGAffineTransform

enter image description here

override func draw(_ rect: CGRect) { 

      let context = UIGraphicsGetCurrentContext() 

      let path = CGMutablePath() 
      CGPathAddArc(path, nil, centerX, centerY, radius, -CGFloat(M_PI/2), CGFloat(GLKMathDegreesToRadians(currentAngle)), false) 

      context!.addPath(path) 
      context!.setStrokeColor(UIColor.blue.cgColor) 
      context!.setLineWidth(3) 
      context!.strokePath() 
     } 

试了几件与0, options: nil, options: [ ]这些都不曾更换零。

在@vadian答案的帮助下。 解决方案:

override func draw(_ rect: CGRect) { 

      let context = UIGraphicsGetCurrentContext()! 

      let path = CGMutablePath() 
      path.addArc(center: CGPoint(x:centerX, y:centerY), radius: radius, startAngle: -(CGFloat.pi/2), endAngle: CGFloat(GLKMathDegreesToRadians(currentAngle)), clockwise: false) 

      context.addPath(path) 
      context.setStrokeColor(UIColor.blue.cgColor) 
      context.setLineWidth(3) 
      context.strokePath() 
     } 

CGMutablePath函数的签名,在斯威夫特3添加一个电弧

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

center必须是CGPoint

path.addArc(center: CGPoint(x:centerX, y:centerY), 
      radius: radius, 
     startAngle: -(CGFloat.pi/2), 
      endAngle: CGFloat(GLKMathDegreesToRadians(currentAngle)), 
     clockwise: false) 

要避免四个感叹号直接打开背景

let context = UIGraphicsGetCurrentContext()! 

并删除所有其他!

+0

可能还不错,可以添加一个小例子,说明如何避免在OP代码中使用所有'!'。 – rmaddy

+0

@rmaddy在这种特殊情况下,强制展开的上下文非常好。根据文档,任何'UIView'在调用'drawRect'之前提供一个有效的上下文(*在调用它的drawRect:方法之前,视图对象会将有效的上下文推送到堆栈上,使其成为当前的*) – vadian

+0

然后'let context = UIGraphicsGetCurrentContext()!'并避免使用所有'context!'用法。 – rmaddy