@IBDesignable UiView绘图(_ rect:CGRect)在IB中工作但在设备

时间:2016-11-14 23:02:51

标签: swift3 core-graphics drawrect

我在绘制rect函数中有一个循环进度,它是UIControl的子类。 Swift 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.
    }

我哪里出错?

enter image description here

1 个答案:

答案 0 :(得分:1)

问题是radius的设置。在评论中,您指出您在init中设置它,并且您显然必须允许帧中的后续更改(尤其是在使用自动布局时),因此您可以移动{{1进入draw(_:)(或者,如果您没有使用radius,而是使用draw(_:)等,则可以在layoutSubviews()中执行此操作。)