2013-03-05 45 views
7

Tôi đang cố gắng tạo vòng kết nối bên dưới trong ứng dụng iOS của mình. Tôi biết làm thế nào để làm cho các vòng tròn nhưng không hoàn toàn chắc chắn về cách để có được những điểm dọc theo vòng cung. Nó phải có trong mã không phải là một hình ảnh. Dưới đây cũng là mã tôi hiện đang có.Vòng tròn vẽ 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); 
    } 

} 

CẬP NHẬT để trả lời

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

Trả lời

5

Nếu (x, y) là trung tâm và r là bán kính của vòng tròn lớn, trung tâm của vòng kết nối bên ngoài thứ i sẽ là:

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

Bắt đầu Cita trong 0 và tăng nó PI/4 radian cho vòng tròn tiếp theo (hoặc 45 độ)

thực hiện làm việc

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

Chỉnh sửa: Thêm thực hiện và đổi tên biến.

+0

Nó không hoạt động. Tôi chỉ nhận được vòng tròn lớn. Bạn có thể thấy cách tôi thực hiện nó ở trên không. Tôi đã làm điều đó sai? – BDGapps

+0

Bạn nên sử dụng cita + = M_PI/4.0, không phải cita = M_PI/4 và theo triển khai của bạn, không phải là trung tâm của vòng kết nối của bạn (point.x/2, point.y-point.x/2)? – ikaver

+0

Tôi đã cập nhật mã ở trên nhưng cùng một vấn đề – 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); }

}

Các vấn đề liên quan