App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - App-ontwikkeling - Swift en iOS: Random RGB kleur fout

Leendert Jan  Leendert Jan heeft nog geen Studiekaart. Klokje13 jan 2015, 18:41
Avatar
Avatar
Berichten:22


Heeft iemand enig idee waarom het volgende fout gaat? Fout vermelding bij de regel van var kleur. Als ik     red: roodFloat    invul ipv red: 1.0 krijg ik een foutmelding.

Ik wil een willekeurige kleur maken dmv RGB instellingen.

import UIKit

 

class ViewController: UIViewController {

    

    var kleur: UIColor!

    var rood = 1

    var roodFloat: CGFloat = 1.0

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }

 

 

    @IBAction func newColor(sender: AnyObject) {

        

        rood = Int(arc4random_uniform(UInt32(255)))

        println(rood)

        

        //indien rood is 0, dan plus 1 anders mag ik niet delen

        roodFloat = (CGFloat(rood + 1) / 255)

        println(roodFloat)

        

        var groen = Int(arc4random_uniform(UInt32(255)))

        

        var blauw = Int(arc4random_uniform(UInt32(255)))

        

        

        var kleur =  UIColor(red: roodFloat, green: 1.0, blue: 1.0, alpha: 1.0)

       // self.view.backgroundColor = kleur

    }

 

 

}

 

/////////////////

 

Zo juist op internet deze functie gevonden. Het werkt, maar ik heb geen idee wat het betekent en waarom het nu wel werkt.

 

func getRandomColor() -> UIColor{

        

        var randomRed:CGFloat = CGFloat(drand48())

        println(randomRed)

        

        var randomGreen:CGFloat = CGFloat(drand48())

        println(randomGreen)

        

        var randomBlue:CGFloat = CGFloat(drand48())

         println(randomBlue)

        

        return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)

        

 

    }

 

 

Reageer


Admin Roelf  Klokje13 jan 2015, 20:17
Avatar


Leendert Jan,

De reden voor de foutmelding is dat je een property (var kleur) meteen moet initialiseren, tenzij het een optional is. Om er een optional van te maken, zet je geen uitroepteken (daarmee pak je een optional uit) maar een vraagteken achter de naam, dus:

var kleur: UIColor?

en de roodFloat-berekening kun je ook als volgt doen:

rood = Int(arc4random_uniform(UInt32(256)))
// levert een getal van 0 t/m 255 op

roodFloat = CGFloat(rood) / 255
// resultaat: CGFloat van 0.0 tot en met 1.0


println(roodFloat)

Succes!

Reageer

Goed advies! 1 persoon vindt dit goed advies.

Leendert Jan  Leendert Jan heeft nog geen Studiekaart. Klokje13 jan 2015, 20:31
Avatar
Avatar
Berichten:22


Bedankt Roelf.

Nu werkt het wel :-)

Reageer


Admin Roelf  Klokje13 jan 2015, 20:41
Avatar


Heeft iemand enig idee waarom het volgende fout gaat? Fout vermelding bij de regel van var kleur. Als ik     red: roodFloat    invul ipv r ...

Leendert Jan, ik heb even snel een voorbeeld voor je in elkaar gezet. Je kunt het complete project downloaden door hier te klikken. Het gaat natuurlijk om de inhoud van ViewController.swift:

 

import UIKit

class ViewController: UIViewController {

    func randomCGFloat() ->CGFloat {
        return CGFloat(arc4random_uniform(256)) / 255
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func newColor(sender: AnyObject) {
        self.view.backgroundColor = UIColor(red: randomCGFloat(), green: randomCGFloat(), blue: randomCGFloat(), alpha: 1)
    }
}

Dit zou je verder moeten helpen. Succes!

 

Reageer

Goed advies! 1 persoon vindt dit goed advies.

Leendert Jan  Leendert Jan heeft nog geen Studiekaart. Klokje13 jan 2015, 20:46
Avatar
Avatar
Berichten:22


Bedankt !

Dat ziet er nog mooier uit. Weer volop leermomenten. Super.

Reageer

Leuk! 1 persoon vindt vindt dit leuk.