Я пытаюсь оживить дугу, используя UIBezierPath, когда пользователь нажимает на этот настраиваемый элемент управления. Путь безье просто щелкает вперед без какой-либо анимации.Анимация кругового прогресса с Swift
Причина, по которой я переопределяю drawrect, заключается в том, что я хочу отобразить этот пользовательский элемент управления в построителе интерфейса. Есть ли хороший подход для отображения кругового прогресса в построителе интерфейса и охарактеризовать прогресс?
Вот мой код:
import Foundation
import UIKit
import QuartzCore
@IBDesignable class CircleControl:UIControl {
@IBInspectable var progressTotal:CGFloat = 100
@IBInspectable var progressCounter:CGFloat = 20
{
willSet(newProgressCounter) {
let animation = CABasicAnimation(keyPath: "strokeEnd")
animation.duration = 0.5;
animation.toValue = newProgressCounter;
animation.delegate = self;
layer.addAnimation(animation, forKey: "strokeEnd")
}
didSet {
setNeedsDisplay()
}
}
override func drawRect(rect: CGRect) {
let center = CGPointMake(bounds.size.width/2, bounds.size.height/2)
let radius = bounds.size.width/2;
let pi = CGFloat(M_PI)
let sliceAngle:CGFloat = (2 * pi)/progressTotal
let progressAngle:CGFloat = sliceAngle * progressCounter
let startAngle:CGFloat = CGFloat(-M_PI_2) + sliceAngle
let endAngle:CGFloat = startAngle + progressAngle;
let path = UIBezierPath()
path.addArcWithCenter(center, radius: radius - 5, startAngle: startAngle, endAngle: endAngle, clockwise: true)
path.lineWidth = 5
path.stroke()
}
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
println("touch")
self.progressCounter = 80
}
override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
self.progressCounter = 20
}
}
Вы пытаетесь анимировать внутри IB? – Jeef