【问题标题】:iOS Drawing CirclesiOS 画圈
【发布时间】:2013-03-05 22:22:37
【问题描述】:

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

}

更新答案

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

【问题讨论】:

    标签: ios quartz-graphics geometry drawrect


    【解决方案1】:

    如果 (x,y) 是圆心,r 是你的大圆的半径,那么第 i 个外圆的圆心将是:

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

    cita 从 0 开始,下一个圆(或 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;
    }
    

    编辑:添加实现和重命名变量。

    【讨论】:

    • 它不工作。我只是得到大圆圈。你能看看我是如何在上面实现的吗?我做错了吗?
    • 您应该使用 cita += M_PI / 4.0 ,而不是 cita = M_PI / 4 ,并且根据您的实施,它不是您圈子的中心(point.x/2,point.y- point.x/2)?
    • 我没有改变那部分怎么可能在外面
    • 当我将其更改为 45 时,我得到了一个奇怪的气泡散布。你可以在上面看到它。任何想法
    • 我在写完之前误加了评论,再看一遍。 @BDGapps 。您应该使用 M_PI/4,因为 cos 函数使用弧度。
    【解决方案2】:

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多