2017-05-26 2 views
0

Ich habe buchstäblich über das Web für wie 2to3 Stunden sah, leider nichts finden konnte (2. Problem: zu rasche neue wird -> diese ignoriert werden kann)Animation in swift: Kreisförmige gestrichelte Ladebalken?

Grundsätzlich muss ich Circular Laden bar gestrichelte : sollte jeder Punkt einzeln wie ein Kreis Last animiert ..

ich in der Lage war, einen kreisförmigen gestrichelter Kreis zu machen, aber es könnte nicht animieren ...

Jede Hilfe, auch wenn das ist ein würde geschätzt Bibliothek von GitHub oder Anythin g ..

Hier ist mein Code, um einen kreisförmigen gestrichelter Kreis für die Erstellung ..

import UIKit 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    let circlePath = UIBezierPath(arcCenter: CGPoint(x: 100,y: 100), radius: 100.0, startAngle: 0.0, endAngle:CGFloat(M_PI * 2), clockwise: true) 
    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = circlePath.cgPath 
    shapeLayer.position = CGPoint(x: 100, y: 100) 
    shapeLayer.fillColor = UIColor.clear.cgColor 
    shapeLayer.strokeColor = UIColor.blue.cgColor 
    shapeLayer.lineWidth = 6.0 
    let one : NSNumber = 1 
    let two : NSNumber = 13 
    shapeLayer.lineDashPattern = [one,two] 
    shapeLayer.lineCap = kCALineCapRound 
    view.layer.addSublayer(shapeLayer) 

} 
override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning()} 
} 

thats what I got

Das ist, was ich will (unter One):

enter image description here

Antwort

1

Ich habe um mit benutzerdefinierten Aktivitätsindikatoren spielen, hier ist also eine Möglichkeit, es

import UIKit 

@IBDesignable class ActivityIndicatorCircle: UIView { 
    var timerInterval: Double = 0.1 
    var timer : Timer? 
    var endAngle: CGFloat = 0.0 
    var angleStep   = CGFloat.pi/20.0 
    var angleOffset   = -CGFloat.pi/2.0 

    var shapeLayer = CAShapeLayer() 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    func startAnimating() { 
     superview?.bringSubview(toFront: self) 

     layer.cornerRadius = frame.width/2 
     self.clipsToBounds = true 

     isHidden = false 
     timer?.invalidate() 
     timer = nil 

     timer = Timer.scheduledTimer(timeInterval: timerInterval, 
           target: self, 
           selector: #selector(self.updateCircle), 
           userInfo: nil, 
           repeats: true) 
    } 

    func stopAnimating() { 
     isHidden = true 
     timer?.invalidate() 
     timer = nil 
    } 

    func updateCircle() { 
     endAngle += angleStep 
     if endAngle > CGFloat.pi * 2.0 { 
      endAngle -= CGFloat.pi * 2.0 
     } 
     DispatchQueue.main.async { 
      self.shapeLayer.removeFromSuperlayer() // remove the previous version 

      let lineWidth: CGFloat = 6.0 
      let radius = self.frame.size.width/2.0 // if the view is square, this gives us center as well 

      let circlePath = UIBezierPath(arcCenter: CGPoint(x: radius,y: radius), radius: radius - lineWidth, startAngle: self.angleOffset, endAngle: self.endAngle + self.angleOffset, clockwise: true) 

      self.shapeLayer.path = circlePath.cgPath 
      self.shapeLayer.position = CGPoint(x: 0, y: 0) 
      self.shapeLayer.fillColor = UIColor.clear.cgColor 
      self.shapeLayer.strokeColor = UIColor.blue.cgColor 
      self.shapeLayer.lineWidth = lineWidth 
      let one : NSNumber = 1 
      let two : NSNumber = 13 
      self.shapeLayer.lineDashPattern = [one,two] 
      self.shapeLayer.lineCap = kCALineCapRound 
      self.layer.addSublayer(self.shapeLayer) 
     } 
    } 
} 

, dies zu tun zu verwenden, eine UIView zu Storyboard hinzufügen, und legen Sie die Klasse zu ActivityIndicatorCircle

Um es zu starten, rufen activityIndicatorCircle.startAnimating()

+0

Hey Russell Danke für die Antwort Man.! Können Sie mehr Informationen dazu geben .. Ich meine es funktioniert nicht, was auch immer Sie gesagt haben, dass ich das tat. Ich hatte ein Objekt für ActivityIndicatorCircle in viewDidAppear von Viewcontroller.swift erstellt und in storyBoard die Klasse dieser Ansicht zugewiesen..Noch nicht wokring. –

+1

Ich habe ein Beispielprojekt für Sie https://github.com/CarterMiller/ActivityIndicatorCircle erstellt. Da ich den Kreis-Indikator auf einem basiert, den ich bereits gemacht habe, können Sie sehen, wie ich die anderen im selben Projekt gemacht habe :-) – Russell

+0

Whoa! Thanku Merrussell .. Es hatte das Problem gelöst .. Vielen Dank. Nur wegen euch Leute wie stackoverflow und solche gibt es .. Weiter so gute Arbeit = D =) –

0

für den Umlauflader können Sie diese Bibliothek verwenden, die Ihnen helfen wird. https://github.com/naoyashiga/RPLoadingAnimation

+0

Danke für superschnelle bro antworten .. wie pro meine Anforderungen Ihre Antwort dosn't Arbeit .. _/\ _ –