2017-04-04 37 views
0

我想繪製一條路徑: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() 
     } 

回答

3

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

相關問題