2013-03-05 2 views
7

iOS 앱에서 아래의 원을 만들려고합니다. 원을 만드는 방법을 알고 있지만 호를 따라 점을 얻는 방법에 대해서는 완전히 확신하지 못합니다. 그것은 이미지가 아닌 코드에 있어야합니다. 아래 코드는 현재 가지고있는 코드입니다. (x, y)는 중심이고, R이 큰 원의 반지름의 중심 인 경우 iOS 그림 서클

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

} 

enter image description here

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

답변

5

답변을 업데이트] i 번째 외부 서클은 다음과 같습니다.

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

시작 0 CITA 및 구현을

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

편집 작업이 PI가/4 다음 원 라디안 (45도)

를 증가 : 추가 구현 및 변수를 이름.

+0

. 나는 큰 원을 얻는다. 위의 구현 방법을 알 수 있습니까? 내가 잘못 했니? – BDGapps

+0

cita = M_PI/4가 아닌 cita + = M_PI/4.0을 사용해야하며 구현에 따라 서클의 중심이 아닙니다 (point.x/2, point.y-point.x/2)? – ikaver

+0

위의 코드를 업데이트했지만 동일한 문제가 발생했습니다 – 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); }

} 그것은 작동하지 않습니다