Connor Freeman
Connor Freeman

Reputation: 77

iOS - UIBezierPath making start angle always vertical

enter image description here

Hi I'm currently trying to make random angles of a circle but id like the startangle to always be vertical. In the image above its shows 180 degrees of a circle but the start angle is horizontal and it changes depending on the angle i specify. So basically i want the start of the circle to always start at 0 degrees or vertical. Does anyone know the solution for this?

This is the code I'm using.

let center = CGPointMake(size.width/2, size.height/2)

let path = UIBezierPath()
path.addArcWithCenter(center, radius: 200, startAngle: 0, endAngle: 180.degreesToRadians, clockwise: true)
path.addLineToPoint(center)
path.closePath()

let angleShape = SKShapeNode(path: path.CGPath)
angleShape.strokeColor = UIColor(red: 0.203, green: 0.596, blue: 0.858, alpha: 1.0)
angleShape.fillColor = UIColor(red: 0.203, green: 0.596, blue: 0.858, alpha: 1.0)
addChild(angleShape)

Upvotes: 0

Views: 1691

Answers (1)

hamobi
hamobi

Reputation: 8130

change this:

path.addArcWithCenter(center, radius: 200, startAngle: 0, endAngle: 180.degreesToRadians, clockwise: true) 

to this:

path.addArcWithCenter(center, radius: 200, startAngle: CGFloat(M_PI_2), endAngle: CGFloat(M_PI + M_PI_2), clockwise: true)

if you want a random startAngle and endAngle try this

func randomRange(min min: CGFloat, max: CGFloat) -> CGFloat {
    assert(min < max)
    return CGFloat(Float(arc4random()) / 0xFFFFFFFF) * (max - min) + min
}

let startAngle = randomRange(min: CGFloat(0), max: CGFloat(M_PI*2))
let endAngle = randomRange(min: CGFloat(0), max: CGFloat(M_PI*2))

path.addArcWithCenter(center, radius: 200, startAngle: startAngle, endAngle: endAngle, clockwise: true)

enter image description here

Upvotes: 1

Related Questions