IOS drawing circles

I am trying to create circles below in my iOS app. I know how to create circles, but I'm not quite sure how to get points along an arc. It should be in code not an image. Below is the code that I have.

enter image description here

- (void)drawRect:(CGRect)rect { CGPoint point; point.x = self.bounds.origin.x + self.bounds.size.width/2; point.y = self.bounds.origin.y + self.bounds.size.height/2; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, 2.0); CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); CGRect circle = CGRectMake(point.x/2,point.y-point.x/2,point.x,point.x); CGContextAddEllipseInRect(context, circle); CGContextStrokePath(context); for (int i = 0; i<8; i++) { CGRect circleMini = CGRectMake(??????,??????,point.x/4,point.x/4); CGContextAddEllipseInRect(context, circleMini); CGContextStrokePath(context); } } 

UPDATE ANSWERS

  float cita = 0; for (int i = 0; i<8; i++) { CGPoint pointCir = CGPointMake(point.x/2 + radius * cos(cita) , (point.y-point.x/2) + radius * sin(cita) ); CGRect circleMini = CGRectMake(pointCir.x,pointCir.y,radius/4,radius/4); CGContextAddEllipseInRect(context, circleMini); CGContextStrokePath(context); cita += M_PI / 4.0; } 

enter image description here

+7
source share
2 answers

If (x, y) is the center, and r is the radius of your big circle, then the center of the i-th outer circle will be:

  center(i) = ( x + r * cos(cita) , y + r * sin(cita) ) 

Run cita at 0 and increase it with PI / 4 radius for the next circle (or 45 degrees)

Working implementation

 CGFloat cita = 0; CGFloat bigCircleRadius = point.x / 2.0; CGFloat smallCircleRadius = bigCircleRadius / 4.0; for (int i = 0; i < 8; i++) { CGPoint smallCircleCenter = CGPointMake(point.x + bigCircleRadius * cos(cita) - smallCircleRadius/2.0 , point.y + bigCircleRadius * sin(cita) - smallCircleRadius / 2.0 ); CGRect smallCircleRect = CGRectMake(smallCircleCenter.x,smallCircleCenter.y,smallCircleRadius,smallCircleRadius); CGContextAddEllipseInRect(context, smallCircleRect); CGContextStrokePath(context); cita += M_PI / 4.0; } 

Edit: Added implementation and renamed variables.

+5
source

 - (void)drawRect:(CGRect)rect { const NSUInteger kNumCircles = 8u;  CGFloat height = CGRectGetHeight(rect); CGFloat smallCircleRadius = height / 10.0f; CGRect bigCircleRect = CGRectInset(rect, smallCircleRadius / 2.0f, smallCircleRadius / 2.0f); CGFloat bigCircleRadius = CGRectGetHeight(bigCircleRect) / 2.0f; CGPoint rectCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, 2.0f); CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); CGContextAddEllipseInRect(context, bigCircleRect); CGContextStrokePath(context); CGFloat alpha = 0; for (NSUInteger i = 0; i < kNumCircles; i++) { CGPoint smallCircleCenter = CGPointMake(rectCenter.x + bigCircleRadius * cos(alpha) - smallCircleRadius/2.0f , rectCenter.y + bigCircleRadius * sin(alpha) - smallCircleRadius / 2.0f ); CGRect smallCircleRect = CGRectMake(smallCircleCenter.x,smallCircleCenter.y,smallCircleRadius,smallCircleRadius); CGContextAddEllipseInRect(context, smallCircleRect); CGContextStrokePath(context); alpha += M_PI / (kNumCircles / 2.0f); } 

}

code>

0
source

All Articles