nehmen viel von diesen hier Fragen Zeichnung: Problems animating a countdown in swift sprite kit und Animating circular progress View in SwiftKreisfortschrittsanzeige in iOS
jedoch die Beispiele oben (und alle anderen Beispiele, die ich online gefunden habe) zeigen die Fortschrittsanzeige mit einem Satz Animieren Dauer. Meine animiert den Download-Fortschritt eines UIImage in eine UITableView-Zelle. Hier ist mein Code soweit. In meiner UITableViewCell Unterklasse, ich habe dies:
func drawProgress(toValue: Float) {
let circlePath = UIBezierPath(arcCenter: CGPoint(x: self.contentView.frame.width/2, y: self.contentView.frame.height/2), radius: 30, startAngle: 0, endAngle: 6.28, clockwise: true)
// create its cooresponding layer
let circleLayer = CAShapeLayer()
circleLayer.frame = self.contentView.bounds
circleLayer.path = circlePath.CGPath
circleLayer.strokeColor = UIColor.blackColor().CGColor
circleLayer.fillColor = self.contentView.backgroundColor?.CGColor
circleLayer.lineWidth = 1.0
self.contentView.layer.addSublayer(circleLayer)
// create the animation
let pathAnimation = CABasicAnimation(keyPath: "strokeEnd")
pathAnimation.duration = 0.1
pathAnimation.fromValue = NSNumber(float: 0.0)
pathAnimation.toValue = NSNumber(float: toValue)
// apply the animation to path
circleLayer.addAnimation(pathAnimation, forKey: "strokeEnd")
}
I NSURLSessionDownloadDelegate bin mit dem Download-Fortschritt der NSData zu überwachen. Innerhalb dieser Methode erhalte ich alle notwendigen Informationen, um den Download% zu verfolgen. Hier ist mein Code dort:
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
//...other code above to get the correct cell for index path, etc
myCell.drawProgress(toValue:download.progress)
//trackCell.progressView.progress = download.progress
}
Die kommentierte out line:
//myCell.progressView.progress = download.progress
ist ein UIProgressBar. Diese UIProgressBar meldet und zeigt in der Zelle den korrekten Fortschritt jedes Mal an, also weiß ich, dass ich alle notwendigen Informationen habe, und die Info ist richtig, so ist es nur etwas darüber, wie ich das implementiere, um es nicht zu arbeiten. Derzeit, wenn ich die TableView lade, kann ich sehen, dass die ersten paar Zellen die Animation wirklich schnell (schneller als der eigentliche Download) zeichnen, und wenn ich dann die Tabelle herunterscrolle, sind alle Fortschrittsbalken bereits voll Ich sehe keine Animation in ihnen.
Ich weiß, dass download.progress den richtigen Float enthält, der den Download-Prozess verfolgt. Wie kann ich diesen CAShapeLayer für jede Zelle richtig animieren lassen?
dank