В принципе, у меня есть класс, который содержит функцию 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») в второй контроллер.
Как бы я это сделал?
Просто добавьте свой пользовательский вид (ProgressCircle) в иерархию представлений, и UIKit позаботится о вызове drawRect. Например, в viewDidLoad добавьте что-то вроде 'self.view.addSubview (progressCircle)' – Clafou
К сожалению, это дает мне ошибку '(ProgressCircle) .Type не конвертируется в UIView' – user3746428
У меня такое чувство, что вы вводите в заблуждение классы и объекты, если это определенно стоит сделать быстрый курс о концепциях ООП. В приведенной выше строке должно предшествовать нечто вроде «let progressCircle = ProgressCircle()» для создания объекта, а затем строка с правильной капитализацией (progressCircle, которая является экземпляром, а не ProgressCircle, который является классом) – Clafou