2016-04-16 18 views
1

Nach UIBezierPath Referenz habe ich versucht, einen gestrichelten Pfad zu zeichnen, der als gestrichelter Bogen enden sollte. Die Zeichenrichtung ist jedoch falsch. clockwise wurde wahr, aber die obere Hälfte des Kreises eingestellt wurde, im Gegensatz zu ziehen, was in der Apple-Seite erwähnt wurdeKreis von UIBezierPath in falscher Richtung in SKShapeNode gezeichnet

let arcForCompleted = 
     UIBezierPath(arcCenter: origin, radius: radius, startAngle: 0, endAngle: CGFloat(M_PI), clockwise: true) 
let pattern = getPattern(self.circumference, segments: involved) 
let dashedPathForCompleted = CGPathCreateCopyByDashingPath(arcForCompleted.CGPath, nil, 0, pattern, pattern.count) 
let dashedCircleForCompleted = SKShapeNode(path: dashedPathForCompleted!) 

Ich vermute, das liegt daran, UIKit und SpriteKit anderen Koordinatensystem hat.

+1

Bitte fügen Sie einige mehr Code zu sehen. –

Antwort

2

UIBezierPath wurde mit UIKit geschrieben, daher verwendet es das UIKit-Koordinatensystem, (0,0) befindet sich oben links mit positiven y-Werten, die nach unten laufen. Für den SKNode hat es ein anderes Koordinatensystem, (0,0) liegt in der Mitte, während positives y läuft. Sie sollten dies beim Zeichnen von Bögen beachten, da dies den Parameter im Uhrzeigersinn beeinflusst. Sie finden eine Diskussion des SKNode-Koordinatensystems here.

Sie können diesen Code auf einem Spielplatz fügen Sie den Unterschied auch

let bezierPath = UIBezierPath(arcCenter: CGPoint(x: 50.0,y: 50.0), radius: 50, startAngle: 0, endAngle: CGFloat(M_PI), clockwise: true) 
class ArcView:UIView 
{ 
    override func drawRect(rect: CGRect) { 
     let arcForCompleted = bezierPath 
     let pattern:[CGFloat] = [10.0,10.0] 
     arcForCompleted.setLineDash(pattern, count: 2, phase: 0.0) 
     arcForCompleted.stroke() 
    } 
} 
let arcView = ArcView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0)) 
arcView.backgroundColor = UIColor.whiteColor() 

let arcForCompleted = bezierPath 
let shape = SKShapeNode() 
shape.path = arcForCompleted.CGPath