@artursk

Как повторить цикл отсчета таймера?

При увеличении циклов, больше одного, по окончанию каждого цикла необходимо показать первый элемент из списка массива в этом лэйбле, а по окончанию последнего цикла показать фразу об окончании тренировки. не могу подобрать условия для того чтобы корректно отображались лэйблы при смене количества цыклов.
let exersiseName = ["БЕГ", "ПРЫЖКИ", "ПРИСЕДАНИЯ"]
@IBOutlet var nameExersiseLabel = UILabel()//лэйбл с названием упражнения
@IBOutlet var timerLabel = UILabel()//лэйбл секундомера
@IBOutlet var nextExersiseLabel = UILabel()

var timer = NSTimer()
var exersiseTime = 30
var timerRunning = false
var i = 0
var sets = 2 //вводим переменную количества циклов которая будет меняться 
var count = 0

func Counting(){
    exersiseTime -= 1
    timerLabel.text = "\(Int(exersiseTime))"
    if exersiseTime == -1 {
        i += 1
        exersiseTime = 30
        timerLabel.text = "\(Int(exersiseTime))"
 
        if i + 1 > exersiseName.count { //Конец тренировки
             count += 1
             if (count >= sets) {
                    timerLabel.text = "0"
                    timer.invalidate()
                    timerRunning = false
             } else {
                    i = 0
             }
         }
         if i + 1 < exersiseName.count { //Ход тренировки
               nameExersiseLabel.text = exersiseName[i] as? String
               nextExersiseLabel.text = ("\(exersiseName[i + 1])")
         } 
         if i + 1 == exersiseName.count { //Последнее упражнение в тренировке
               nameExersiseLabel.text = exersiseName[i] as? String
               // не могу подобрать условия ниже для того чтобы корректно отображались лэйблы при смене количества цыклов
               nextExersiseLabel.text = ("\(exersiseName[0])") // Отображать при наличии последующих циклов
               nextExersiseLabel.text = "WORKOUT COMPLETE!" //Отображать при выполнении последнего цыкла
         } 
     }
}

Кнопку старта таймера не пишу, если кому-то надо, то добавлю
  • Вопрос задан
  • 214 просмотров
Решения вопроса 2
maestrro712
@maestrro712
 iOS Developer
Заведите переменную var cycles = 0, поставьте условие if i + 1 > exersiseName.count первым и модифицируйте следующим образом:

if i + 1 > exersiseName.count { //Конец цикла
            count+=1
            if (count >= sets) {
                   timerLabel.text = "0"
                   timer.invalidate()
                   timerRunning = false
            }else{
                   i = 0
            }     
 } //важно: не надо ставить здесь else
if ....
Ответ написан
@artursk Автор вопроса
var sets = 1 // По факту будет отображенно два цикла, если sets = 0, то один цикл
 
if i + 1 > exersiseName.count { //Конец цикла
            count+=1
            if (count > sets) { // здесь меняем условие
                   timerLabel.text = "0"
                   timer.invalidate()
                   timerRunning = false
            }else{
                   i = 0
            }     
 }
//Теперь по показу последнего упражнения прописываем
            if i + 1 == exersiseName.count { // Последнее упражнение
                nameExersiseLabelChange.text = exersiseName[i] as? String
                if (count < set) {
                    nextExersiseLabelChange.text = ("\(exersiseName[0])")
                } else if (count == set){
                    nextExersiseLabelChange.text = "WORKOUT COMPLETE!"
                }
            }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы