Comment puis-je créer une fonction de couleur aléatoire avec Swift?
import UIKit
class ViewController: UIViewController {
var randomNumber = arc4random_uniform(20)
var randomColor = arc4random()
//Color Background randomly
func colorBackground() {
// TODO: set a random color
view.backgroundColor = UIColor.yellow
}
}
Vous aurez besoin d’une fonction pour produire des CGFloat
s aléatoires de 0 à 1:
extension CGFloat {
static func random() -> CGFloat {
return CGFloat(arc4random()) / CGFloat(UInt32.max)
}
}
Ensuite, vous pouvez utiliser ceci pour créer une couleur aléatoire:
extension UIColor {
static func random() -> UIColor {
return UIColor(red: .random(),
green: .random(),
blue: .random(),
alpha: 1.0)
}
}
Si vous voulez un alpha aléatoire, créez simplement un autre nombre aléatoire pour cela aussi.
Vous pouvez maintenant assigner la couleur de fond de votre vue comme suit:
self.view.backgroundColor = .random()
extension UIColor {
static var random: UIColor {
return UIColor(red: .random(in: 0...1),
green: .random(in: 0...1),
blue: .random(in: 0...1),
alpha: 1.0)
}
}
extension CGFloat {
static var random: CGFloat {
return CGFloat(arc4random()) / CGFloat(UInt32.max)
}
}
extension UIColor {
static var random: UIColor {
return UIColor(red: .random, green: .random, blue: .random, alpha: 1.0)
}
}
let myColor: UIColor = .random
Créez une fonction pour générer une couleur aléatoire:
func getRandomColor() -> UIColor {
//Generate between 0 to 1
let red:CGFloat = CGFloat(drand48())
let green:CGFloat = CGFloat(drand48())
let blue:CGFloat = CGFloat(drand48())
return UIColor(red:red, green: green, blue: blue, alpha: 1.0)
}
Vous pouvez maintenant appeler cette fonction chaque fois que vous avez besoin d’une couleur aléatoire.
self.view.backgroundColor = getRandomColor()
Avec Swift 4.2, vous pouvez simplifier cela en utilisant les nouvelles fonctions aléatoires ajoutées:
extension UIColor {
static func random () -> UIColor {
return UIColor(
red: CGFloat.random(in: 0...1),
green: CGFloat.random(in: 0...1),
blue: CGFloat.random(in: 0...1),
alpha: 1.0)
}
}
Il y a plus de détails ici .
Swift 4.2 ????
J'ajoute cette réponse parce qu'elle utilise une approche différente et que nombre des réponses précédentes nécessitent du sucre syntaxique supplémentaire, ce qui, à mon avis, ne devrait pas être préféré. Vanilla Swift pour la victoire.
extension UIColor {
/**
* Returns random color
* EXAMPLE: self.backgroundColor = UIColor.random
*/
static var random: UIColor {
let r:CGFloat = .random(in: 0 ... 1)
let g:CGFloat = .random(in: 0 ... 1)
let b:CGFloat = .random(in: 0 ... 1)
return UIColor(red: r, green: g, blue: b, alpha: 1)
}
}
Swift 4.2 Extension
extension UIColor {
convenience init(red: Int, green: Int, blue: Int) {
assert(red >= 0 && red <= 255, "Invalid red component")
assert(green >= 0 && green <= 255, "Invalid green component")
assert(blue >= 0 && blue <= 255, "Invalid blue component")
self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
}
convenience init(rgb: Int) {
self.init(
red: (rgb >> 16) & 0xFF,
green: (rgb >> 8) & 0xFF,
blue: rgb & 0xFF
)
}
static func random() -> UIColor {
return UIColor(rgb: Int(CGFloat(arc4random()) / CGFloat(UINT32_MAX) * 0xFFFFFF))
}
}
Utilisation:
let color = UIColor.random()
func anotherGetRandomColor()->UIColor{
let newRed = arc4random_uniform(255)/255
let newGreen = arc4random_uniform(255)/255
let newBlue = arc4random_uniform(255)/255
return UIColor(red: CGFloat(newRed), green: CGFloat(newGreen), blue: CGFloat(newBlue), alpha: 1.0)
}