gpt4 book ai didi

使用 NSTimer 快速查看进度

转载 作者:可可西里 更新时间:2023-10-31 23:59:05 25 4
gpt4 key购买 nike

我有一个进度 View 栏,我想用它来指示时间。这是我在 Swift 中的第一个项目,我不确定如何去做。所以任何帮助/建议将不胜感激......

(使用 Xcode 7.2 和 Swift 2.0)

下面是我的 View Controller 。触发“btnPlaySession”时, View Controller 上的内容每 20 秒更改一次。当计时器计数到 20 时,我喜欢用进度条来指示这一点(因此进度条会重置,每次内容更改时)。

class CreatedSessionViewController: UIViewController {

var createdSession: [YogaPose]!
var poseDuration: Double = 20.00
var timer = NSTimer!()
var currentPoseIndex = 1

//Outlets:
@IBOutlet var poseProgressView: UIProgressView!
@IBOutlet var lblPoseCount: UILabel!
@IBOutlet var lblPoseName: UILabel!
@IBOutlet var imgPose: UIImageView!
@IBOutlet var tvDescription: UITextView!

// Do any additional setup after loading the view:
override func viewDidLoad() {
super.viewDidLoad()

displayFirstPoseInArray()
}

func displayFirstPoseInArray(){
lblPoseCount.text = (String(currentPoseIndex) + "/" + String(createdSession.count))
lblPoseName.text = createdSession[0].title
imgPose.image = UIImage(named: String(format: "%d.jpg", (createdSession[0].id)!))
tvDescription.text = createdSession[0].desc
}

@IBAction func btnPlaySession(sender: AnyObject) {
timer = NSTimer.scheduledTimerWithTimeInterval(poseDuration, target: self, selector: "getNextPoseData", userInfo: nil, repeats: true)
}

func getNextPoseData(){
if (currentPoseIndex < createdSession.count){

setProgressBar()

lblPoseCount.text = (String(currentPoseIndex + 1) + "/" + String(createdSession.count))
lblPoseName.text = createdSession[currentPoseIndex].title
imgPose.image = UIImage(named: String(format: "%d.jpg",(createdSession[currentPoseIndex].id)!))
tvDescription.text = createdSession[currentPoseIndex].desc
currentPoseIndex += 1
print(currentPoseIndex)
}
}

func setProgressBar(){


}
}

最佳答案

好的 - 所以如果你想让进度条每秒更新一次,那么你需要一个每秒触发的计时器 - 但它会触发 20 次,并调用 setProgressBar 作为选择器而不是 getNextPoseData

setProgressBar 中,您需要增加一个类级别的属性,indexProgressBar 可能,并且只需将进度条属性 progress 设置为 1.0/索引进度条

如果 indexProgressBar == 20,则调用 getNextPoseData,并重置进度条

这里是你如何做的一个简化版本

class ViewController: UIViewController
{
@IBOutlet weak var progressBar: UIProgressView!
var timer = NSTimer!()
var poseDuration = 20
var indexProgressBar = 0
var currentPoseIndex = 0

override func viewDidLoad()
{
super.viewDidLoad()

// initialise the display
progressBar.progress = 0.0
}


@IBAction func cmdGo(sender: AnyObject)
{
// display the first pose
getNextPoseData()

// start the timer
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "setProgressBar", userInfo: nil, repeats: true)
}

func getNextPoseData()
{
// do next pose stuff
currentPoseIndex += 1
print(currentPoseIndex)
}

func setProgressBar()
{
if indexProgressBar == poseDuration
{
getNextPoseData()

// reset the progress counter
indexProgressBar = 0
}

// update the display
// use poseDuration - 1 so that you display 20 steps of the the progress bar, from 0...19
progressBar.progress = Float(indexProgressBar) / Float(poseDuration - 1)

// increment the counter
indexProgressBar += 1
}
}

关于使用 NSTimer 快速查看进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35898275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com