我有这个时钟
我想制作类似的东西。我想让它在每一秒都工作,我的意思是工作开始充满然后逐渐变空。
我创建了一个自定义视图,并添加了UIBezierPath
,如下所示:
class CircleView: UIView {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
override func drawRect(rect: CGRect) {
let startAngle: CGFloat = 0.0
let endAngle: CGFloat = 80.0
let radius: CGFloat = 80.0
let path2 = UIBezierPath(arcCenter: center,
radius: radius/2,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
UIColor.greenColor().setFill()
path2.fill()
}
}
我得到的只是:
我不知道哪里出错(也许我的整个方法都错了),我试图将值改为开始角度为0,结束角度为90,但保持相同的形状。
在人们建议我应该将度数改为弧度后,我改变了我的代码
class CircleView: UIView {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
func degreesToRadians (number: Int) -> CGFloat {
return CGFloat(number) * CGFloat(M_PI) / 180.0
}
override func drawRect(rect: CGRect) {
let startAngle: CGFloat = degreesToRadians(0)
let endAngle: CGFloat = degreesToRadians(270)
let radius: CGFloat = 40.0
let path2 = UIBezierPath(arcCenter: center,
radius: radius,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
UIColor.greenColor().setFill()
path2.fill()
}
}
但结果如下:
你可以将结果与我想要的图像进行比较,剪切不是我想要的。请看图片,我不知道怎么用英文说出来
答案 0 :(得分:2)
class CircleView: UIView {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
override init(frame: CGRect) {
super.init(frame: frame)
}
func degreesToRadians (number: Int) -> CGFloat {
return CGFloat(number) * CGFloat(M_PI) / 180.0
}
override func drawRect(rect: CGRect) {
let startAngle: CGFloat = degreesToRadians(0)
let endAngle: CGFloat = degreesToRadians(270)
let radius: CGFloat = 40.0
let path = UIBezierPath(arcCenter: center,
radius: radius,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
UIColor.greenColor().setFill()
path.addLineToPoint(center)
path.fill()
}
}
let c = CircleView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
...看到这一行
path.addLineToPoint(center)