无与预期的参数类型不兼容CGAffineTransform
问题描述:
我想绘制一条路径:CGMutablePath
但我在添加路径时遇到问题。无不是与预期的参数类型兼容'UnsafePointer'CGAffineTransform'
无与预期的参数类型不兼容CGAffineTransform
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()!
并删除所有其他!
。
可能还不错,可以添加一个小例子,说明如何避免在OP代码中使用所有'!'。 – rmaddy
@rmaddy在这种特殊情况下,强制展开的上下文非常好。根据文档,任何'UIView'在调用'drawRect'之前提供一个有效的上下文(*在调用它的drawRect:方法之前,视图对象会将有效的上下文推送到堆栈上,使其成为当前的*) – vadian
然后'let context = UIGraphicsGetCurrentContext()!'并避免使用所有'context!'用法。 – rmaddy