2017-04-04 3 views
0

パスを描画しようとしています:CGMutablePathパスを追加する際に問題が発生しています。 nilは'UnsafePointer'CGAffineTransform'Nilは期待される引数型と互換性がありません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: [ ]なしでnilを置き換える予想引数の型と互換性がありません。

@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

スイフト3にアークを追加するCGMutablePathの関数のシグネチャは

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

に(centerCGPointでなければならない)あなたのケースで

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

あります4つの感嘆符が直接コンテキストをアンラップするのを避ける

let context = UIGraphicsGetCurrentContext()! 

と他のすべてを削除する!

+0

OPのコードで '!'をすべて使わないようにする方法の少しの例を追加するといいでしょう。 – rmaddy

+0

@rmaddyこの特定のケースでは、強制アンラップされたコンテキストは完全に問題ありません。ドキュメンテーションによると 'UIView'は' drawRect'を呼び出す前に有効なコンテキストを提供しています(drawRect:メソッドを呼び出す前に、ビューオブジェクトは有効なコンテキストをスタックにプッシュして現在にします*) – vadian

+0

'let context = UIGraphicsGetCurrentContext()! 'を実行し、すべての' context! '使用の必要性を避けます。 – rmaddy

関連する問題