2013-03-05 14 views
7

Sto cercando di creare i cerchi di seguito nella mia app iOS. So come fare i cerchi ma non sono del tutto sicuro su come ottenere i punti lungo l'arco. Deve essere nel codice non un'immagine. Di seguito è riportato anche il codice che attualmente ho.Cerchi disegno iOS

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); 
    } 

} 

AGGIORNATO DI RISPONDERE

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

risposta

5

Se (x, y) è il centro e r è il raggio del cerchio grande, al centro del I-esimo cerchio esterno sarà:

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

Inizio Cita a 0 e incrementarlo PI/4 radianti per il cerchio accanto (o 45 gradi)

implementazione Lavorare

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: implementazione aggiunto e rinominato variabili.

+0

Non funziona. Ho appena ottenuto il grande cerchio. Puoi vedere come l'ho implementato sopra. Ho fatto male? – BDGapps

+0

Dovresti usare cita + = M_PI/4.0, non cita = M_PI/4, e secondo la tua implementazione, non è il centro della tua cerchia (point.x/2, point.y-point.x/2)? – ikaver

+0

Ho aggiornato il codice sopra ma lo stesso problema – BDGapps

0

 

- (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); }

}