2017-05-26 28 views
0

我從字面上看在網上像2to3的時間,可惜找不到任何東西,(第二個問題:被新SWIFT - >這是可以忽略不計)swift中的動畫:圓形虛線載入欄?

基本上我需要循環虛線加載條:每個點應該獨立動畫像一個圓形的負荷..

我能夠做出一個圓虛線圓圈,但不能設置動畫...

任何幫助,將不勝感激,即使這就是一個來自github或anythin的圖書館g^..

這是我創建一個圓形虛線圓圈代碼..

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

這就是我想要的(下面的一個):

enter image description here

回答

1

我一直在與自定義活動指標玩耍,所以這裏的做

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) 
     } 
    } 
} 

使用一個方法,一個UIView添加到您的故事板,並設置類ActivityIndicatorCircle

要啓動它,請撥打activityIndicatorCircle.startAnimating()

+0

嘿羅素謝謝你的答案曼。 你可以提供更多的信息.​​. 我的意思是它不工作,無論你說我做到了。 我在viewcontroller.swift的viewDidAppear中爲ActivityIndi​​catorCircle創建了一個對象,在storyBoard中已經爲該視圖分配了該類。還沒有開始。 –

+1

我爲你創建了一個示例項目https://github.com/CarterMiller/ActivityIndi​​catorCircle。因爲我在一個我已經完成的循環指標的基礎上,可以看到我是如何在同一個項目中完成的:-) – Russell

+0

哇! Thanku Mr.russell .. 它解決了這個問題..非常感謝。 只是因爲你的人社區像stackoverflow等存在.. 保持良好的工作= D =) –