を私はサークルの進捗タイマーを表し小型のUIViewを持って、私はhttps://github.com/kaandedeoglu/KDCircularProgress- KDCircularProgress円形バー
から引き出されたいくつかのコードを修正しています。私はそれを参照して、またそれをKDCircularProgress
クラスにインスタンス化しました。
私はタイマープログレス円形バーを開始し、リセットするためのメソッドを実装するために管理しています。
しかし、私はを再起動しています。ポーズアニメーションを再生すると、循環進行バーがになります。
マイコードプリアンブル:
import UIKit
class SomeTableViewController: UITableViewController {
//Circular progress vars
var currentCount = 1.0
let maxCount = 60.0
//Reference selected UIView & instantiate
@IBOutlet weak var circularProgressView: KDCircularProgress!
スタートアニメーション - 60秒のアニメーション:
if currentCount != maxCount {
currentCount += 1
circularProgressView.animateToAngle(360, duration: 60, completion: nil)
}
アニメーションを停止し、リセットするには
currentCount = 0
circularProgressView.animateFromAngle(circularProgressView.angle, toAngle: 0, duration: 0.5, completion: nil)
アニメーションを一時停止する:
circularProgressView.pauseAnimation()
は、どのように私は一時停止状態の後にアニメーションを再起動する方法を設定するのでしょうか?任意の明確化のため、事前に
感謝します。これは私の最初のアニメーションですが、私はこの問題を自分で解決しようとしましたが、私の特定のケースに適用できる構文を見つけられないようです。正しい道に私を置くための@Duncan Cに
ありがとう:
は解決策を更新しました。
次のように私は私がcurrentCount += 1
を使用してカウンタの進捗を開始したので、私は私がカウンターを一時停止しようとするだろうと思った...
を私の問題を解決しました:
私は 'を持っているだろうと思ったif currentCount != maxCount {
currentCount -= 1
circularProgressView.animateToAngle(360, duration: 60, completion: nil)
}
カウンター(net off off counter +=1
とcounter -=1
)を効果的に停止させることができます。理論的には、これはカウンターのゼロへの進展であるはずですが、それはカウントダウンを続けました。
だから私は、円形のカウンターのアニメーションを一時停止するcircularProgressView.pauseAnimation()
に戻って戻りました。
一時停止後にアニメーションを再開するには、の更新時間を、更新時間、つまりアニメーションが一時停止した時間に変更する必要がありました。
私はここでのトリックのビットを使用してNSTimer含ま - 私はとにかく自分のコードを持っているために起こりました。一時停止の時にアニメーションを再起動する
:
if currentCount != maxCount {
currentCount += 1
circularProgressView.animateToAngle(360, duration: NSTimeInterval(swiftCounter), completion: nil)
}
私はアニメーションの円形バーのための私の期間を更新する方法を見つけ出すことができませんでしたが、NSTimerを使用して経過時間を更新する方法を知っていました - タイマーは同じ持続時間とカウントダウン速度で動作します。そこで私は、更新されたタイマーの値への参照にタグを付けました。解決した問題;)
マイコード:
import UIKit
class SomeFunkyTableViewController: UITableViewController {
//Circular progress variables
var currentCount = 0.0
let maxCount = 60.0
@IBOutlet weak var circularProgressView: KDCircularProgress!
//Timer countdown vars
var swiftTimer = NSTimer()
var swiftCounter = 60
@IBOutlet weak var startButton: UIButton!
@IBOutlet weak var timerView: UIView!
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var startView: UIView!
override func viewDidLoad() {
circularProgressView.angle = 0
timerLabel.text = String(swiftCounter)
super.viewDidLoad()
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func startButton(sender: AnyObject) {
pauseBtn.alpha = 1.0
playBtn.alpha = 1.0
stopBtn.alpha = 1.0
circularProgressView.hidden = false
if currentCount != maxCount {
currentCount += 1
circularProgressView.animateToAngle(360, duration: 60, completion: nil)
}
startView.hidden = true
timerView.hidden = false
swiftTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: #selector(SomeFunkyTableViewController.updateCounter), userInfo: nil, repeats: true)
}
@IBOutlet weak var pauseBtn: UIButton!
@IBAction func pauseButton(sender: AnyObject) {
circularProgressView.pauseAnimation()
swiftTimer.invalidate()
pauseBtn.alpha = 0.5
playBtn.alpha = 1.0
stopBtn.alpha = 1.0
}
@IBOutlet weak var playBtn: UIButton!
@IBAction func playButton(sender: AnyObject) {
if currentCount != maxCount {
currentCount += 1
circularProgressView.animateToAngle(360, duration: NSTimeInterval(swiftCounter), completion: nil)
}
if !swiftTimer.valid {
swiftTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: #selector(SomeFunkyTableViewController.updateCounter), userInfo: nil, repeats: true)
}
if swiftCounter == 0 {
swiftTimer.invalidate()
}
pauseBtn.alpha = 1.0
playBtn.alpha = 0.5
stopBtn.alpha = 1.0
}
@IBOutlet weak var stopBtn: UIButton!
@IBAction func stopButton(sender: AnyObject) {
currentCount = 0
circularProgressView.animateFromAngle(circularProgressView.angle, toAngle: 0, duration: 0.5, completion: nil)
circularProgressView.hidden = true
timerView.hidden = true
startView.hidden = false
swiftTimer.invalidate()
swiftCounter = 60
timerLabel.text = String(swiftCounter)
pauseBtn.alpha = 1.0
playBtn.alpha = 1.0
stopBtn.alpha = 0.5
}
func updateCounter() {
swiftCounter -= 1
timerLabel.text = String(swiftCounter)
if swiftCounter == 0 {
swiftTimer.invalidate()
}
}
}
側注: - StartViewとTimerView私は2つの重複景色を眺めることができます。 1つはビューの読み込みに隠されているため、非表示/非表示の参照です。私はプレスプレイ/一時停止/停止のボタンを暗くします。
アニメーションを一時停止した後.. circularProgressViewとは何ですか?角度ログ? – Shubhank
@ katherine-jenkinsここの図書館員。将来Githubの問題を開くようにしてください。必要に応じてライブラリを一緒に改良することができます。問題を正しく理解している場合は、animateメソッドでrelativeDurationオプションを 'false'に設定してみてください。それはタイマとインクリメント/デクリメントを取り除くのに役立ちます。 –