2014-09-29 2 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

+0

К сожалению, это дает мне ошибку '(ProgressCircle) .Type не конвертируется в UIView' – user3746428

+0

У меня такое чувство, что вы вводите в заблуждение классы и объекты, если это определенно стоит сделать быстрый курс о концепциях ООП. В приведенной выше строке должно предшествовать нечто вроде «let progressCircle = ProgressCircle()» для создания объекта, а затем строка с правильной капитализацией (progressCircle, которая является экземпляром, а не ProgressCircle, который является классом) – Clafou

ответ

0

Вы должны добавить свой ProgressCircle так же, как subView.

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

+0

это означает, что ваш 'progressCircle' добавлен. Но может быть, он не работает должным образом. Вы должны проверить свой' drawRect'. – codester

Смежные вопросы