Swift 显示圆的一部分
我想显示圆的任意部分。 我知道如何使用Swift 显示圆的一部分,swift,Swift,我想显示圆的任意部分。 我知道如何使用layer.cornerRadius获得圆视图,现在我只想看到圆的一部分(对于任何给定的辐射值)。如果它的其余部分只是隐藏在白色的东西下面,那就好了。 有什么想法,如何实现 编辑: 我已经为我的观点编写了一个类: class Circle:UIView { var rad = 0 let t = CGFloat(3.0) override func draw(_ rect: CGRect) { super.draw(rec
layer.cornerRadius
获得圆视图,现在我只想看到圆的一部分(对于任何给定的辐射值)。如果它的其余部分只是隐藏在白色的东西下面,那就好了。
有什么想法,如何实现
编辑:
我已经为我的观点编写了一个类:
class Circle:UIView {
var rad = 0
let t = CGFloat(3.0)
override func draw(_ rect: CGRect) {
super.draw(rect)
let r = self.frame.width / CGFloat(2)
let center = CGPoint(x: r, y: r)
let path = UIBezierPath()
path.move(to: CGPoint(x: t, y: r))
path.addLine(to: CGPoint(x: 0.0, y: r))
path.addArc(withCenter: center, radius: CGFloat(r), startAngle: CGFloat(Double.pi), endAngle: CGFloat(Double.pi+rad), clockwise: true)
let pos = path.currentPoint
let dx = r - pos.x
let dy = r - pos.y
let d = sqrt(dx*dx+dy*dy)
let p = t / d
path.addLine(to: CGPoint(x: pos.x + p * dx, y: pos.y + p * dy))
path.addArc(withCenter: center, radius: r-t, startAngle: CGFloat(Double.pi+rad), endAngle: CGFloat(Double.pi), clockwise: false)
UIColor(named: "red")?.setFill()
path.fill()
}
}
public func setRad(perc:Double) {
rad = Double.pi * 2 * perc
}
在我的视图控制器中,我调用
circleView.layer.cornerRadius = circleView.frame.size.width / 2
circleView.clipsToBounds = true
circleView.layer.borderWidth = 1
circleView.layer.borderColor = UIColor.darkGray.cgColor
circleView.layer.shadowColor = UIColor.black.cgColor
circleView.layer.shadowOpacity = 1
circleView.layer.shadowOffset = CGSize.zero
circleView.layer.shadowRadius = 3
circleView.layer.masksToBounds = false
circleView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.onTap)))
现在,我得到了一个完整的正方形视图,从拐角处画了一个黑色的圆圈和我画的红色弧线。如果有必要,我明天将发布一张图片一种方法是绘制一条
UIBezierPath
如果只需要一个圆弧,可以调用init(arcCenter:radius:startAngle:endAngle:顺时针:)
初始值设定项。请记住以弧度为单位指定起点和终点角度
之后,您可以设置笔划颜色并调用stroke
如果需要圆的扇区,可以使用无参数初始值设定项创建一个
UIBezierPath
,然后移动(到:)
圆的中心,然后添加直线(到:)
弧的起点。你可以用三角法计算出这个点的位置。在那之后,像我上面描述的那样调用addArc
,然后addLine(to:)
您开始的点。之后,您可以填充路径。UIBezierPath是您的助手。好的,我绘制了圆弧,但现在除了通过设置获得的边框外,我还可以看到原始边框cornerRadius@Ginso然后,不要设置角半径或边框,而是在draw(:)中完全绘制所需的视图
。但是,即使我不调用super.draw并使用uibezierro以清晰的颜色填充整个帧,我也会看到一个白色的视图。你到底想画什么?你能给我看张照片吗@金索