swift 在另一个 viewcontroller 中绘制来自 class 的形状(以编程方式)

swift drawing shape from class in another viewcontroller (programatically)

我正处于制作简单图表的早期阶段。但是,我在以编程方式绘制形状时遇到了一些麻烦。

我试过很多变体:

let donutChart = CounterView(frame = CGRectMake(100, 100, 100, 100))
cellView.addSubview(donutChart)

没有错误,但在过去的 2 天里,我无法让它在屏幕上绘制任何东西。

我要画的class是这样的:

import UIKit

let NoOfGlasses = 8
let π:CGFloat = CGFloat(M_PI)

class CounterView: UIView {

var counter: Int = 5 {
    didSet {
        if counter <=  NoOfGlasses {
            //the view needs to be refreshed
            setNeedsDisplay()
        }
    }
}

var outlineColor: UIColor = UIColor.blueColor()
var counterColor: UIColor = UIColor.orangeColor()

override func drawRect(rect: CGRect) {
    // 1
    let center = CGPoint(x:bounds.width/2, y: bounds.height/2)

    // 2
    let radius: CGFloat = max(bounds.width, bounds.height)

    // 3
    let arcWidth: CGFloat = 76

    // 4
    let startAngle: CGFloat = 3 * π / 4
    let endAngle: CGFloat = π / 4

    // 5
    var path = UIBezierPath(arcCenter: center,
        radius: bounds.width/2 - arcWidth/2,
        startAngle: startAngle,
        endAngle: endAngle,
        clockwise: true)

    // 6
    path.lineWidth = arcWidth
    counterColor.setStroke()
    path.stroke()
}
}

这应该导致这个基本形状:

任何关于如何以编程方式在我的视图控制器中绘制此形状的帮助将不胜感激!

我把你的 class 放到了 Playground 中。我能够使用以下命令绘制它:

let myview = CounterView()
myview.frame = CGRectMake(100,100,300,300)
myview.counter = 5

这是它的样子:

您是否忘记添加屏幕上某个视图的子视图的 CounterView?