2015-03-13 3 views
1

Итак, я начал делать игру, и я хотел использовать индикатор выполнения в качестве панели состояния для многих разных вещей, и я не мог понять, почему он не обновлялся вообще. Однако он обновил функцию viewdidload. Вот код, который я использую.UIProgressView как панель состояния и обновление при нажатии кнопки. Swift

func updateHealthBars() { 
    hullHealthBar.setProgress(hullHealth/hullHealthMax, animated: true) 
    cannonsHealthBar.setProgress(cannonsHealth/cannonsHealthMax, animated: true) 
    sailsHealthBar.setProgress(sailsHealth/sailsHealthMax, animated: true) 
    crewHealthBar.setProgress(crewHealth/crewHealthMax, animated: true) 

} 

@IBAction func setSailButton(sender: AnyObject) { 
    if hullHealth > 0 { 
     hullHealth-=20 
    } 
    else if cannonsHealth > 0 { 
     cannonsHealth-=20 
    } 
    else if sailsHealth > 0 { 
     sailsHealth-=20 
    } 
    else if crewHealth > 0 { 
     crewHealth-=20 
    } 
    updateHealthBars() 
} 

Если кто-нибудь знает, что мне нужно сделать, чтобы обновить свое здоровье, когда я нажимаю кнопку, я был бы очень благодарен, потому что я пытался сделать это на некоторое время теперь без успеха. Я использую XCode 6.

ответ

0

я, наконец, получил эту работу. Так что мой оригинальный код работал. Фактическая проблема заключалась в том, что моя кнопка не была подключена правильно или что-то еще, хотя все остальное работало нормально. Я сделал новую кнопку и вложил в нее то же самое, и она отлично работала. Это была проблема с кнопкой, а не с нитью или чем-то еще.

2

В Swift при присвоении чисел с использованием литералов без десятичных знаков используется Int. ProgressView требует поплавков. Попробуйте следующее:

func updateHealthBars() { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     hullHealthBar.setProgress(hullHealth/hullHealthMax, animated: true) 
     cannonsHealthBar.setProgress(cannonsHealth/cannonsHealthMax, animated: true) 
     sailsHealthBar.setProgress(sailsHealth/sailsHealthMax, animated: true) 
     crewHealthBar.setProgress(crewHealth/crewHealthMax, animated: true) 
    }); 
} 

@IBAction func setSailButton(sender: AnyObject) { 
    if hullHealth > 0.0 { 
     hullHealth-=20.0 
    } 
    else if cannonsHealth > 0.0 { 
     cannonsHealth-=20.0 
    } 
    else if sailsHealth > 0.0 { 
     sailsHealth-=20 
    } 
    else if crewHealth > 0.0 { 
     crewHealth-=20.0 
    } 
    updateHealthBars() 
} 

Убедитесь, что свойства также плавает: var hullHealth: Float = 0 или var hullHealth = 0.0

+0

Нет, это не проблема. Я пробовал это, и это не исправить. Переменные были с плавающей точкой с самого начала. Они просто не обновляются. – samando

+0

проверить, будет ли 'hullHealthBar.setProgress (10.0/2.0, анимированный: true)' works – bsarrazin

+0

Вы можете установить только значения прогресса от 0.0 до 1.0, которые будут иметь значение 5.0. – samando