Last active
April 6, 2019 11:59
-
-
Save drosenstark/9548f2dddf0630bd5ee2 to your computer and use it in GitHub Desktop.
(thanks to Paintcode) Draw a hollow circle in swift, or just a piece of one... angle starts at bottom and rotates around clockwise.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class func drawHollowCircle(circleColor: UIColor, rect: CGRect, startAngle: CGFloat = 1, endAngle: CGFloat = 360, outerRingProportion: CGFloat = 1, innerRingProportion: CGFloat = 0.5, drawShadow : Bool) { | |
//// Variable Declarations | |
let startAngleCalced: CGFloat = -startAngle + 270 | |
let endAngleCalced: CGFloat = -endAngle + 270 | |
let innerRingDiameter: CGFloat = rect.size.width * innerRingProportion | |
let innerRingOffset: CGFloat = 0.5 * (rect.size.width - innerRingDiameter) | |
let innerRingRect = CGRectMake(innerRingOffset, innerRingOffset, innerRingDiameter, innerRingDiameter) | |
let outerRingDiameter: CGFloat = rect.size.width * outerRingProportion | |
let outerRingOffset: CGFloat = 0.5 * (rect.size.width - outerRingDiameter) | |
let outerRingRect = CGRectMake(outerRingOffset, outerRingOffset, outerRingDiameter, outerRingDiameter) | |
//// Outer Circle Drawing | |
let outerCircleRect = outerRingRect | |
let outerCirclePath = UIBezierPath() | |
outerCirclePath.addArcWithCenter(CGPointMake(outerCircleRect.midX, outerCircleRect.midY), radius: outerCircleRect.width / 2, startAngle: -startAngleCalced * CGFloat(M_PI)/180, endAngle: -endAngleCalced * CGFloat(M_PI)/180, clockwise: true) | |
outerCirclePath.addLineToPoint(CGPointMake(outerCircleRect.midX, outerCircleRect.midY)) | |
outerCirclePath.closePath() | |
//// InnerCircle Drawing | |
let innerCircleRect = innerRingRect | |
let innerCirclePath = UIBezierPath() | |
innerCirclePath.addArcWithCenter(CGPointMake(innerCircleRect.midX, innerCircleRect.midY), radius: innerCircleRect.width / 2, startAngle: -startAngleCalced * CGFloat(M_PI)/180, endAngle: -endAngleCalced * CGFloat(M_PI)/180, clockwise: true) | |
innerCirclePath.addLineToPoint(CGPointMake(innerCircleRect.midX, innerCircleRect.midY)) | |
innerCirclePath.closePath() | |
// Clip out the innerCirclePath | |
outerCirclePath.appendPath(innerCirclePath) | |
outerCirclePath.addClip() | |
outerCirclePath.usesEvenOddFillRule = true; | |
if (drawShadow) { | |
CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeZero, 0.25 * innerRingDiameter, circleColor.CGColor); | |
} | |
circleColor.setFill() | |
outerCirclePath.fill() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment