Ios 画圈

Ios 画圈,ios,quartz-graphics,geometry,drawrect,Ios,Quartz Graphics,Geometry,Drawrect,我正在尝试在我的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;

我正在尝试在我的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);
    }

}

-(void)drawRect:(CGRect)rect
{
CGPoint点;
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(上下文,2.0);
CGContextSetStrokeColorWithColor(上下文[UIColor blueColor].CGColor);
CGRect圆=CGRectMake(点.x/2,点.y-点.x/2,点.x,点.x);
CGContextAddEllipseInRect(上下文,圆圈);
CGContextStrokePath(上下文);
对于(int i=0;i如果(x,y)是大圆的中心,r是大圆的半径,则第i个外圆的中心为:

  center(i) = ( x + r * cos(cita) , y + r * sin(cita) )
以0开始cita,并为下一个圆(或45度)增加PI/4弧度

工作实施

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;
}
cgcta=0;
CGFloat bigCircleRadius=点x/2.0;
CGFloat smallCircleRadius=bigCircleRadius/4.0;
对于(int i=0;i<8;i++){
CGPoint smallCircleCenter=CGPointMake(点x+bigcirleradius*cos(cita)-smallCircleRadius/2.0,点y+bigciradius*sin(cita)-smallCircleRadius/2.0);
CGRect smallCircleRect=CGRectMake(smallCircleCenter.x,smallCircleCenter.y,smallCircleRadius,smallCircleRadius);
CGContextAddEllipseInRect(上下文、小圆圈等);
CGContextStrokePath(上下文);
cita+=M_-PI/4.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);
    }

-(void)drawRect:(CGRect)rect
{
常数整数kNumCircles=8u

CGFloat height=CGRectGetHeight(rect);
CGFloat smallCircleRadius=高度/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(上下文,2.0f);
CGContextSetStrokeColorWithColor(上下文[UIColor blueColor].CGColor);
CGContextAddEllipseInRect(上下文,bigCirclerRect);
CGContextStrokePath(上下文);
cgloatα=0;
对于(整数i=0;i
}


它不起作用。我只是得到了一个大圆圈。你能看到我是如何实现它的吗?我做错了吗?你应该使用cita+=M_-PI/4.0,而不是cita=M_-PI/4,根据你的实现,它不是圆的中心(点.x/2,点.y-point.x/2)?怎么可能是在注释之外呢?因为我没有更改该部分。当我将其更改为45时,我得到了一个奇怪的气泡散布。你可以在上面看到。任何想法我在完成之前错误地添加了注释,请再次阅读。@BDGapps。你应该使用M_PI/4,因为cos函数使用弧度。

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