iOS-绘制圆心,中心和半径

时间:2012-04-08 15:37:12

标签: ios geometry

我想通过使用中心(x,y)和半径r来绘制圆圈。

我使用CGRect绘制了一些圆圈。当我绘制独立圆时,它工作正常。但我试图在圆周上绘制圆圈。

在这种方法中问题是:主圆圈不是正好在外圆的中心移动,因为外圆是使用CGRect/frame制作的。

所以如果我们可以使用中心和半径绘制圆圈,请帮助我。

3 个答案:

答案 0 :(得分: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中绘制圆圈

答案 1 :(得分:0)

Francesco的回答有效。我唯一要补充的是澄清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);

答案 2 :(得分: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()

结果:

enter image description here