2014-09-29 64 views
0

基本上,我有一個類,其中包含我用來顯示圓形進度條的drawRect函數。在Swift中調用類來顯示drawRect

我的問題是,我不確定如何顯示進度圈?我以前從來沒有和班級一起工作過,所以我不知道我是如何與班級互動的。

這是我的代碼:

class ProgressCircle: UIView { 

override func drawRect(rect: CGRect) { 
    var ctx = UIGraphicsGetCurrentContext() 

    var progress: CGFloat = 0.7 
    var innerRadiusRatio: CGFloat = 0.5 

    var path: CGMutablePathRef = CGPathCreateMutable() 
    var startAngle: CGFloat = CGFloat(-M_PI_2) 
    var endAngle: CGFloat = CGFloat(-M_PI_2) + min(1.0, progress) * CGFloat(M_PI * 2) 
    var outerRadius: CGFloat = CGRectGetWidth(self.bounds) * 0.5 - 1.0 
    var innerRadius: CGFloat = outerRadius * innerRadiusRatio 
    var center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)) 

    CGPathAddArc(path, nil, center.x, center.y, innerRadius, startAngle, endAngle, false) 
    CGPathAddArc(path, nil, center.x, center.y, outerRadius, endAngle, startAngle, true) 
    CGPathCloseSubpath(path) 
    CGContextAddPath(ctx, path) 

    CGContextSaveGState(ctx) 
    CGContextClip(ctx) 
    CGContextDrawImage(ctx, self.bounds, UIImage(named: "RadialProgressFill").CGImage) 
    CGContextRestoreGState(ctx) 
} 

}

我有我的上述SecondViewController類這種代碼,我打算在意見(「budgetDisplayView」)的一個內顯示的圓形進度條第二視圖控制器。

我該怎麼辦?

+0

只需將您的自定義視圖(ProgressCircle)添加到視圖層次結構中,並且UIKit將負責調用drawRect。例如在viewDidLoad中添加類似'self.view.addSubview(progressCircle)' – Clafou 2014-09-29 22:18:26

+0

'不幸的是,這給了我錯誤'(ProgressCircle).Type不能轉換爲UIView' – user3746428 2014-09-29 22:22:22

+0

我有一種感覺,你是混淆了類和對象,如果絕對值得做一個關於OOP概念的快速課程。上面這行應該在前面加上'let progressCircle = ProgressCircle()'來創建一個對象,然後上面的行用正確的大寫字母(progressCircle是實例,而不是ProgressCircle,它是類) – Clafou 2014-09-29 22:36:37

回答

0

您應該像subView一樣添加您的ProgressCircle

class SecondViewController: UIViewController { 

//or add where you want or an event 
override func viewDidAppear(animated: Bool) { 
    //give the appropriate frame 
    var circle = ProgressCircle(frame: self.view.bounds) 
    self.budgetDisplayView.addSubview(circle) 
} 
} 
+0

感謝您的回覆。但是,這似乎給我一個黑屏。 – user3746428 2014-09-29 22:51:16

+0

這意味着你的'progressCircle'被添加了。但可能它沒有按預期工作。你應該檢查你的'drawRect'。 – codester 2014-09-29 22:54:41