App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - Producten van de iOS Academie - De videocursus: UIKit in de praktijk: Autolayout

Daniel47  Op de eerste vier stappen van zijn/haar studiekaart scoort Daniel 27%. Klokje26 mrt 2015, 16:49
Avatar
Avatar
Berichten:21


Waarom heb je ervoor gekozen om de alpha waarde ook te laten varieren tussen 0 en 255? De graad van transparantie is toch steeds gelegen tussen 0 en 1? 

Het verband tussen de waarde 255 en een kleur lijkt logischer omdat ook in HTML bv. op die manier een kleur gevormd wordt.

Reageer


Admin Roelf  Klokje28 mrt 2015, 12:51
Avatar


Daniel, er zijn een paar redenen:

1. Ik wilde demonstreren hoe je met Auto Layout de grootte van een label (in dit geval het label achter de UISlider) fixeert. Dat is duidelijker als je met getallen van 0 tot en met 255 werkt.

2. Om getallen met cijfers achter de komma goed te kunnen tonen, gebruik je een Foundation-class die nog niet is behandeld: NSNumberFormatter. Die class komt in een latere (bonus)aflevering aan de orde en omdat er al meer dan genoeg nieuwe materie besproken wordt, heb ik besloten om alles "0-255" te maken.

Overigens: je zou kunnen overwegen om zelf de ViewController aan te passen zodat het wél werkt op de manier die jij beschrijft (dus met waarden van 0 tot en met 1, met een vast/variabel aantal cijfers achter de komma). Leuke oefening!

 

Reageer


Daniel47  Op de eerste vier stappen van zijn/haar studiekaart scoort Daniel 27%. Klokje28 mrt 2015, 15:10
Avatar
Avatar
Berichten:21


Roelf,

dank voor je antwoord.

Ik heb het inderdaad geprobeerd, maar dan zonder de Foundation-class die je vernoemt.

1) Via de Attributes inspector van de slider de minimumwaarde ingesteld op 0 en de maximumwaarde op 1. De current value op 0,5.

2) De functie updateViews in de Viewcontroller.swift als volgt veranderd.

   @IBAction func updateViews() {

        let rgbViewArray = [redView, greenView, bleuView]

        // de alpha waarde is een waarde van tss 0 en 1

        let alpha = CGFloat(alphaSlider.value)

        var resultaatKleur = [CGFloat(0), CGFloat(0), CGFloat(0)]

        // enumerate is nodig omdat de waarden één voor één moeten opgehaald worden

        // om door een array te kunnen lopen en zowel component als view op te halen

        for (component, dezeview) in enumerate(rgbViewArray) {

            let pickerwaarde = CGFloat(pickerView.selectedRowInComponent(component)) / 255

            var kleurVoorOnzeView = [CGFloat(0), CGFloat(0), CGFloat(0)]

            kleurVoorOnzeView[component] = pickerwaarde

            resultaatKleur[component] = pickerwaarde

            dezeview.backgroundColor = UIColor(red: kleurVoorOnzeView[0], green: kleurVoorOnzeView[1], blue: kleurVoorOnzeView[2], alpha: alpha)

        }

        resultaatView.backgroundColor = UIColor(red: resultaatKleur[0], green: resultaatKleur[1], blue: resultaatKleur[2], alpha: alpha)        

        let alphaAsDouble = Double(alphaSlider.value)

        alphawaardeLabel.text = NSString(format: "%.01f", alphaAsDouble)

    }

  

Misschien niet zoals een "echte" het zou doen, maar het werkt. 

Reageer

Leuk! 2 personen vinden vinden dit leuk.

Admin Roelf  Klokje28 mrt 2015, 18:51
Avatar


Daniel, knap gedaan! Eén opmerking: NSNumberFormatter is ideaal voor loalisatie  (dus een decimale komma in plaats van een punt als dat nodig is, afhankelijk van de taal-instellingen van een device). Vandaar dat ik die nog behandel, in plaats van de format-specificier die jij gebruikt.

Reageer