Как отобразить индикатор выполнения в приложении Mac Cocoa (Swift)

В настоящее время я изучаю Swift и особенно для Mac, и я пытался сделать что-то вроде битвы с покемонами. Для этого я хотел отобразить индикаторы прогресса для очков здоровья, но все, что я нашел, это полосатый. Я не знаю, могу ли я заставить их измениться в зависимости от заданного значения, или я не использую правильный тип IBOutlet.

Если кто-нибудь знает, как отображать индикаторы выполнения, это все, что мне нужно :)

Спасибо

(Я француз, так что извините за возможные ошибки...)

Изменить: вот часть моего кода

Переменные:

class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet var window: NSWindow?

var firstPokemon:Pokemon = Pokemon(name: "Aquali", level: 50, HP: 245, power: 10)
//[...]
@IBOutlet var firstPokemonHealthBar: NSProgressIndicator!
//[...]
var firstPokemonOriginalHP:Float = 0

var secondPokemon:Pokemon = Pokemon(name: "Pikachu", level: 90, HP: 300, power: 13)
//[...]
@IBOutlet var secondPokemonHealthBar: NSProgressIndicator!
//[...]
var secondPokemonOriginalHP:Float = 0

инициализировать:

func applicationDidFinishLaunching(aNotification: NSNotification?)
{

    firstPokemonOriginalHP = firstPokemon.HP
    secondPokemonOriginalHP = secondPokemon.HP
}

update (вызывается после каждой атаки)

func update(str:String)
{
    if firstPokemon.HP < 0 {firstPokemon.HP = 0}
    if secondPokemon.HP < 0 {secondPokemon.HP = 0}


    //firstPokemonName.stringValue = firstPokemon.name
    //firstPokemonLevel.stringValue = "Level: " + String(Int(firstPokemon.level))
    //firstPokemonHP.stringValue = "\(Int(firstPokemon.HP))/\(Int(firstPokemonOriginalHP))hp"
    firstPokemonHealthBar.doubleValue = Double(firstPokemon.HP/firstPokemonOriginalHP)
    //firstPokemonPicture.image = NSImage(named: "\(firstPokemon.name)")
    //firstPokemonPicture.image.size = firstPokemonPicture.bounds.size

    //secondPokemonName.stringValue = secondPokemon.name
    //secondPokemonLevel.stringValue = "Level: \(Int(secondPokemon.level))"
    //secondPokemonHP.stringValue = "\(Int(secondPokemon.HP))/\(Int(secondPokemonOriginalHP))hp"
    secondPokemonHealthBar.doubleValue = Double(secondPokemon.HP/secondPokemonOriginalHP)
    //secondPokemonPicture.image = NSImage(named: "\(secondPokemon.name)")
    //secondPokemonPicture.image.size = secondPokemonPicture.bounds.size

    //TextBoxInfos.stringValue = str

    if firstPokemon.HP <= 0 || secondPokemon.HP <= 0
    {
        button1.enabled = false
        button2.enabled = false
        battleEnded()
    }
}

person P1kachu    schedule 06.08.2014    source источник
comment
Вы хотите использовать индикатор выполнения или индикатор уровня? На OSX или iOS? Для NSLevelIndicator у вас есть такие методы, как setIntValue:, а для NSProgressIndicator у вас есть setDoubleValue:.   -  person Jean-Baptiste Yunès    schedule 07.08.2014
comment
По крайней мере, дайте нам код, чтобы показать, как вы рассчитываете ценность для здоровья и что вы пробовали, тогда сообщество точно поймет, что вам нужно.   -  person mohacs    schedule 07.08.2014
comment
NSLevelIndicator, упомянутый @Jean-BaptisteYunès, показывает полосу без полос, которая может быть вам нужна. Если вы хотите использовать NSProgressBar, вам придется подклассифицировать его и переопределить его метод рисования, чтобы рисовать его так, как вам нравится.   -  person Alex    schedule 07.08.2014
comment
Я попробовал NSLevelIndicator (просто замените NSProgressBar в моем коде), и полоса разрезается на две части. При инициализации только левая часть у обоих покемонов зеленая и не станет серой, пока очки здоровья не станут равными 0. (Возможно, я недостаточно ясно выразился...)   -  person P1kachu    schedule 07.08.2014
comment
возможный дубликат ресурсов Cocoa и Objective-C?   -  person P1kachu    schedule 21.08.2014


Ответы (1)


Хорошо, NSLevelIndicator сработал! Мне просто нужно было убедиться, что «Стиль» каждого бара был непрерывным и что максимальное значение было 1, а не 2, как это предопределено. Спасибо, Жан Батист.

Pic
(источник: hostingpics.net< /а>)

person P1kachu    schedule 07.08.2014