[swift] Swift로 임의의 색상을 만드는 방법

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

    }
}



답변

CGFloat0에서 1 사이의 임의 의 s 를 생성하는 함수가 필요합니다 .

extension CGFloat {
    static func random() -> CGFloat {
        return CGFloat(arc4random()) / CGFloat(UInt32.max)
    }
}

그런 다음 이것을 사용하여 임의의 색상을 만들 수 있습니다.

extension UIColor {
    static func random() -> UIColor {
        return UIColor(
           red:   .random(),
           green: .random(),
           blue:  .random(),
           alpha: 1.0
        )
    }
}

임의의 알파를 원하면 다른 난수도 만드십시오.

이제 다음과 같이 뷰의 배경색을 지정할 수 있습니다.

self.view.backgroundColor = .random()


답변

Swift 4.2의 경우

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)
    }
}

Swift 3 이상 :

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


답변

임의의 색상을 생성하는 함수를 만듭니다.

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)
}

이제 임의의 색상이 필요할 때마다이 함수를 호출 할 수 있습니다.

self.view.backgroundColor = getRandomColor()


답변

임의의 단색의 경우 UIColor HSB 이니셜 라이저를 사용하고 색조 만 임의화할 수 있습니다.

extension UIColor {
    static var random: UIColor {
        return .init(hue: .random(in: 0...1), saturation: 1, brightness: 1, alpha: 1)
    }
}

let color1: UIColor = .random
let color2: UIColor = .random
let color3: UIColor = .random
let color4: UIColor = .random
let color5: UIColor = .random

여기에 이미지 설명 입력


답변

함께 스위프트 4.2 , 당신은 추가 된 새로운 임의의 기능을 사용하여이 작업을 단순화 할 수 있습니다 :

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)
  }
}

여기에 자세한 내용이 있습니다 .


답변

스위프트 4.2 ?

이 답변은 다른 접근 방식을 사용하기 때문에 추가하고 있으며 이전 답변의 대부분은 추가 구문 설탕이 필요하기 때문에 내 의견으로는 선호해서는 안됩니다. 승리를위한 바닐라 스위프트.

extension UIColor {
    /**
     * Returns random color
     * ## Examples:
     * 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)
    }
}


답변

SwiftUI-Swift 5

import SwiftUI

extension Color {
    static var random: Color {
        return Color(red: .random(in: 0...1),
                     green: .random(in: 0...1),
                     blue: .random(in: 0...1))
    }
}

용법:

let randomColor: Color = .random