1

我想只使用中心(x,y)和半径r来画一个圆。

我用CGRect. 当我画独立的圆圈时它工作正常。但我想在圆的圆周上画圆。

在这种方法中,问题是:主圆没有完全移动外圆的中心,因为外圆是使用CGRect/frame.

所以如果我们可以使用中心和半径画一个圆,请帮助我。

4

3 回答 3

8

X,Y 和半径是你的变量。

CGRect r;

r.origin.y = Y-radius;
r.origin.x = X-radius;
r.size.width = 2*radius;
r.size.height 2*radius;

然后在这个 CGRect 中画圆

于 2012-04-08T15:47:40.653 回答
0

弗朗切斯科的回答有效。我唯一要补充的是澄清 Y 和 X 是什么(中心 Y 和中心 X)。这是我最终包含绘图的内容,并且我还用与外线相同的颜色填充了圆圈。

CGFloat radius = self.bounds.size.height/4.0;
CGFloat centerX = self.bounds.size.width/2;
CGFloat centerY = self.bounds.size.height/2;

CGRect r;
r.origin.y = centerY-radius;
r.origin.x = centerX-radius;
r.size.width = 2*radius;
r.size.height = 2*radius;

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context,
                                     [UIColor greenColor].CGColor);
CGContextAddEllipseInRect(context, r);
CGContextStrokePath(context);

CGContextSetFillColorWithColor(context,
                                   [UIColor greenColor].CGColor);
CGContextFillEllipseInRect(context, r);
于 2014-11-05T00:42:48.610 回答
0

您可以使用如下所示的贝塞尔路径在 draw(_ rect: CGRect) 方法中绘制一个圆。

import UIKit
import CoreGraphics

class CircleView: UIView {
    var radius: Double = 200.0
    var lineWidth: CGFloat = 5.0
    var centre = CGPoint.zero
    override func draw(_ rect: CGRect) {
        var arrRadians = [Double]()
        let pieVal = Double.pi * 2.0
        let incrVal = pieVal / 100
        arrRadians = stride(from: 0, to: 100, by: incrVal).map{$0}
        for rad in arrRadians {
            let sinRad = (sin(rad) * radius) + Double((rect.size.width / 2))
            let cosRad = (cos(rad) * radius) + Double((rect.size.height / 2))
            let point = CGPoint(x: sinRad, y: cosRad)
            let path = UIBezierPath()
            path.move(to: centre == CGPoint.zero ? point : centre)
            path.addLine(to: point)
            centre = point
            let shapeLayer = CAShapeLayer()
            shapeLayer.path = path.cgPath
            shapeLayer.strokeColor = UIColor.red.cgColor
            shapeLayer.lineWidth = lineWidth
            self.layer.addSublayer(shapeLayer)
        }
    }
}

然后使用 setNeedsDisplay() 方法更改圆的半径。

viewCircle.radius = 100
viewCircle.setNeedsDisplay()

结果:

在此处输入图像描述

于 2020-07-07T17:23:56.083 回答