我想只使用中心(x,y)和半径r来画一个圆。
我用CGRect
. 当我画独立的圆圈时它工作正常。但我想在圆的圆周上画圆。
在这种方法中,问题是:主圆没有完全移动外圆的中心,因为外圆是使用CGRect/frame
.
所以如果我们可以使用中心和半径画一个圆,请帮助我。
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 中画圆
弗朗切斯科的回答有效。我唯一要补充的是澄清 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);
您可以使用如下所示的贝塞尔路径在 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()
结果: