我想通过使用中心(x,y)和半径r来绘制圆圈。
我使用CGRect
绘制了一些圆圈。当我绘制独立圆时,它工作正常。但我试图在圆周上绘制圆圈。
在这种方法中问题是:主圆圈不是正好在外圆的中心移动,因为外圆是使用CGRect/frame
制作的。
所以如果我们可以使用中心和半径绘制圆圈,请帮助我。
答案 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()
结果: