【发布时间】:2016-11-14 23:02:51
【问题描述】:
我在 UIControl 的子类 draw rect 函数中有一个圆形进度。斯威夫特 3,Xcode 8。
看起来像这样:
override func draw(_ rect: CGRect) {
super.draw(rect)
guard let ctx = UIGraphicsGetCurrentContext() else {
return
}
let center = CGPoint(x:rect.size.width/2.0,y:rect.size.height/2.0)
ctx.setStrokeColor(UIColor.cyan.cgColor)
ctx.setLineWidth(40)
ctx.setLineCap(.round)
ctx.addArc(center: center, radius: radius, startAngle: 0, endAngle: CGFloat(M_PI * 2), clockwise: true)
ctx.drawPath(using: .stroke)
}
这个视图正在以编程方式添加到@IBDesignable UIViewSubclass
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.yellow
self.circleTest = TestCircle(frame: self.bounds)
self.addSubview(circleTest!)
setupConstraints() //pins subview to edges of self.
}
我哪里出错了?
【问题讨论】:
-
radius在哪里设置? -
我建议结合使用视图调试器(确保圆形视图在您认为应该在的位置)和普通的调试器/日志记录(确保
rect和center和radius是您认为应该是的)。这可能是一个约束错误。这可能是radius问题。根据提供的信息很难确定。 -
顺便说一句,使用
rect参数来推断圆的大小/中心有点危险。我建议您改为参考bounds。由于documentation says:rect是“需要更新的视图边界部分。第一次绘制视图时,此矩形通常是视图的整个可见边界。但是,在后续的绘制操作中,矩形可能只指定视图的一部分。” -
半径在init函数中设置。半径 = self.frame.size.width/2。这显然是我的问题。不知道我是怎么错过的。
标签: swift3 core-graphics drawrect