Swift에서 UIColorFromRGB를 어떻게 사용할 수 있습니까?


110

Objective-C에서는이 코드를 사용하여 뷰에 대한 RGB 색상 코드를 설정합니다.

#define UIColorFromRGB(rgbValue)        
[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

view.backgroundColor=UIColorFromRGB(0x209624);

Swift에서 어떻게 사용할 수 있습니까?


답변:


169

다음은 해당 함수의 Swift 버전입니다 ( UInt값 의 UIColor 표현을 가져 오기 위해 ) :

func UIColorFromRGB(rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

view.backgroundColor = UIColorFromRGB(0x209624)

1
정의 된 색상 상수를이 함수에 전달하는 경우 상수 유형을 : UInt로 캐스팅하는 것을 잊지 마십시오. 예를 들어 구조체 컬러 {UINT = 0x7fa3b0 정적 DarkBlue을 보자 : UINT = 0x3f7589 정적 연한 파랑하자 : UINT = 0x1f5e75 정적 블루하자}
하비에르 칼라 Llavería

129

나는 넣고 싶었다

cell.backgroundColor = UIColor.colorWithRed(125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0)  

그러나 그것은 작동하지 않았습니다.

그래서 사용했습니다 :
For Swift

cell.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)  

그래서 이것이 제가 찾은 해결 방법입니다.


33
let color : UIColor = UIColor (red : CGFloat (0 / 255.0), green : CGFloat (110 / 255.0), blue : CGFloat (255 / 255.0), alpha : CGFloat (1.0))
Vadym

1
두 번째와 같이 괄호 안에 넣고 첫 번째 숫자를 10 진수로 "/"기호 앞에 놓으면 정수로 잘리지 않습니다.
Andy Lebowitz

64

나는 Nate Cook의 대답을 정말 좋아했지만 조금 더 관용적 인 것을 원했습니다. 나는 이것이 사용자 정의 확장을 통한 편의 이니셜 라이저에 대한 정말 좋은 사용 사례라고 생각합니다.

// UIColorExtensions.swift
import Foundation
import UIKit

extension UIColor {
    convenience init(rgb: UInt) {
        self.init(
            red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgb & 0x0000FF) / 255.0,
            alpha: CGFloat(1.0)
        )
    }
}

이제 다음과 같이 사용할 수 있습니다.

view.backgroundColor = UIColor(rgb: 0x209624)

라이브러리가 아닌 클라이언트 코드에서 이와 같은 UIKit 클래스를 원숭이 패치하는 것이 좋습니다.


rgb 값 0x209624는 어디에서 얻을 수 있습니까?
Cons Bulaquena

@ConsBulaquena 그것은 단지 것 0x- 어떤 진수 색상 다음 color-hex.com
bloudermilk

내가 참조. 굉장히 유용하다! 감사합니다 @bloudermilk
Cons Bulaquena

46
myLabel.backgroundColor = UIColor(red: 50.0/255, green: 150.0/255, blue: 65.0/255, alpha: 1.0)

38

프로그래밍 방식으로 색상을 추가하는 가장 간단한 방법은 ColorLiteral 을 사용하는 입니다.

예제와 같이 ColorLiteral 속성을 추가하면 Xcode에서 선택할 수있는 전체 색상 목록을 표시합니다. 이렇게하면 코드가 적고 HEX 값 또는 RGB를 추가 할 수 있다는 장점이 있습니다 . 또한 스토리 보드에서 최근에 사용한 색상을 얻을 수 있습니다.

예 : self.view.backgroundColor = ColorLiteral여기에 이미지 설명 입력


5
이것은 놀랍다 !
Vaibhav Saran 2018

이 빠른 손을 공유해 주셔서 감사합니다 .. 새로운 학습 .. :)
Ameer

32

16 진수가 아닌 문자열에서 시작하는 경우 16 진수 문자열을 가져와 UIColor를 반환하는 함수입니다.
(형식 : #ffffff또는 으로 16 진수 문자열을 입력 할 수 있습니다. ffffff)

용법:

var color1 = hexStringToUIColor("#d3d3d3")

스위프트 4 :

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }

    if ((cString.count) != 6) {
        return UIColor.gray
    }

    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

스위프트 3 :

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }

    if ((cString.characters.count) != 6) {
        return UIColor.gray
    }

    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

스위프트 2 :

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString

    if (cString.hasPrefix("#")) {
      cString = cString.substringFromIndex(cString.startIndex.advancedBy(1))
    }

    if ((cString.characters.count) != 6) {
      return UIColor.grayColor()
    }

    var rgbValue:UInt32 = 0
    NSScanner(string: cString).scanHexInt(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}



출처 : arshad / gist : de147c42d7b3063ef7bc


13

들어 엑스 코드 9 사용하는 UIColorRGB 값과.

shareBtn.backgroundColor = UIColor( red: CGFloat(92/255.0), green: CGFloat(203/255.0), blue: CGFloat(207/255.0), alpha: CGFloat(1.0) )

시사:

사용자 정의 RGB 색상으로 버튼 미리보기

UIColor에 대한 추가 Apple 문서를 참조하십시오 .


6

Swift 4의 UIColorFromRGB

button.layer.backgroundColor = UIColor(red: 112.0/255, green: 86.0/255, blue: 164.0/255, alpha: 1.0).cgColor

5

나는 신속하게 다음을 사용했습니다.

let appRedColor = UIColor(red: 200.0/255.0, green: 16.0/255.0, blue: 46.0/255.0, alpha: 1.0)
let appSilverColor = UIColor(red: 236.0/255.0, green: 236.0/255.0, blue: 236.0/255.0, alpha: 1.0)
let appWhiteColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
let appNavyColor = UIColor(red: 19.0/255.0, green: 41.0/255.0, blue: 75.0/255.0, alpha: 1.0)

신속하게 다음을 사용했습니다 : let isItAnswer = false;
Alexander Volkov

4

argb 형식에 대한 솔루션 :

//  UIColorExtensions.swift
import UIKit
extension UIColor {

    convenience init(argb: UInt) {
        self.init(
            red: CGFloat((argb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((argb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(argb & 0x0000FF) / 255.0,
            alpha: CGFloat((argb & 0xFF000000) >> 24) / 255.0
        )
    }
}

용법:

var clearColor: UIColor = UIColor.init(argb: 0x00000000)
var redColor: UIColor = UIColor.init(argb: 0xFFFF0000)

3

이것은 나를 위해 신속하게 작동합니다. 이 시도

bottomBorder.borderColor = UIColor (red: 255.0/255.0, green: 215.0/255.0, blue: 60/255.0, alpha: 1.0).CGColor

3

신속한 3 옵션 추가 :

cell.layer.borderColor = UIColor (red: 192.0/255.0, green: 192.0/255.0, blue: 197/255.0, alpha: 1.0).cgColor

2

#define UIColorFromRGB(rgbValue)swift 와 같은 복잡한 매크로를 사용할 수 없습니다 . swift에서 간단한 매크로를 대체하는 것은 다음과 같은 전역 상수입니다.

let FADE_ANIMATION_DURATION = 0.35

여전히 매개 변수를 허용하는 복잡한 매크로는 swift에서 지원되지 않습니다. 대신 함수를 사용할 수 있습니다.

복잡한 매크로는 C와 Objective-C에서 사용되지만 Swift에는 대응되지 않습니다. 복잡한 매크로는 괄호로 묶인 함수형 매크로를 포함하여 상수를 정의하지 않는 매크로입니다. C 및 Objective-C에서 복잡한 매크로를 사용하여 유형 검사 제약 조건을 피하거나 많은 양의 상용구 코드를 다시 입력하지 않도록합니다. 그러나 매크로는 디버깅 및 리팩토링을 어렵게 만들 수 있습니다. Swift에서는 기능과 제네릭을 사용하여 타협없이 동일한 결과를 얻을 수 있습니다. 따라서 C 및 Objective-C 소스 파일에있는 복잡한 매크로는 Swift 코드에서 사용할 수 없습니다.

코코아 및 객관적인 C와 함께 스위프트 사용 에서 발췌

여기에서 사용할 해당 기능의 Swift 버전에 대한 @Nate Cooks 답변을 확인하십시오.


2

이것을 사용할 수 있습니다 :

//The color RGB #85CC4B
let newColor = UIColor(red: CGFloat(0x85)/255
                      ,green: CGFloat(0xCC)/255
                      ,blue: CGFloat(0x4B)/255
                      ,alpha: 1.0)

1

Nate Cook의 대답은 절대적으로 정확합니다. 유연성을 높이기 위해 팩에 다음 기능을 유지합니다.

func getUIColorFromRGBThreeIntegers(red: Int, green: Int, blue: Int) -> UIColor {
    return UIColor(red: CGFloat(Float(red) / 255.0),
        green: CGFloat(Float(green) / 255.0),
        blue: CGFloat(Float(blue) / 255.0),
        alpha: CGFloat(1.0))
}

func getUIColorFromRGBHexValue(value: Int) -> UIColor {
    return getUIColorFromRGBThreeIntegers(red: (value & 0xFF0000) >> 16,
        green: (value & 0x00FF00) >> 8,
        blue: value & 0x0000FF)
}

func getUIColorFromRGBString(value: String) -> UIColor {
    let str = value.lowercased().replacingOccurrences(of: "#", with: "").
        replacingOccurrences(of: "0x", with: "");
        return getUIColorFromRGBHexValue(value: Int(str, radix: 16)!);
}

그리고 이것이 내가 사용하는 방법입니다.

// All three of them are identical:
let myColor1 = getUIColorFromRGBHexValue(value: 0xd5a637)
let myColor2 = getUIColorFromRGBString(value: "#D5A637")
let myColor3 = getUIColorFromRGBThreeIntegers(red: 213, green: 166, blue: 55)

이것이 도움이되기를 바랍니다. 모든 것이 Swift 3 / Xcode 8로 테스트되었습니다.


0

이것은 UIColor의 멋진 확장입니다. UIColor 개체를 만들 때 열거 형 값 (16 진, 문자열) 및 직접 문자열 값을 사용할 수 있습니다.

우리가받을 자격이있는 확장 프로그램 https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.swift


이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Tobi Nary

0

나는 이미 답변을 받았지만 여전히 하나의 라이너가 더 나은 방식으로 도움이되기를 바랍니다.

import UIKit

let requiredColor = UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255, 
                            green: CGFloat((rgbValue & 0x00FF00) >> 8)/255, 
                            blue: CGFloat(rgbValue & 0x0000FF)/255, alpha :1)

업데이트 됨 : : 질문 작성자가 16 진수 값을 제공하기 위해 설명하는 예제에 따라 변경 되었습니다.


0

Swift3에서 이미 선택한 색상으로 시작하는 경우 RGB 값을 온라인 ( http://imagecolorpicker.com ) 으로 가져와 UIColor로 정의 된 값을 사용할 수 있습니다. 이 솔루션은이를 배경으로 구현합니다.

    @IBAction func blueBackground(_ sender: Any) {
        let blueColor = UIColor(red: CGFloat(160/255), green: CGFloat(183.0/255), blue: CGFloat(227.0/255), alpha: 1)
        view.backgroundColor = blueColor

@Vadym은 위의 주석에서 이것을 언급했으며 단일 소수점으로 CGFloat를 정의하는 것이 중요합니다.


0
import Cocoa
class ViewController: NSViewController{
     override func viewDidLoad() {
            super.viewDidLoad()
    self.view.wantsLayer = true
    self.view.layer?.backgroundColor = NSColor(hexString: "#4d9b48").cgColor

}
extension NSColor {

            convenience init(hexString: String, alpha: CGFloat = 1.0) {
                  let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
                  let scanner = Scanner(string: hexString)
                  if (hexString.hasPrefix("#")) {
                      scanner.scanLocation = 1
                  }
                  var color: UInt32 = 0
                  scanner.scanHexInt32(&color)
                  let mask = 0x000000FF
                  let r = Int(color >> 16) & mask
                  let g = Int(color >> 8) & mask
                  let b = Int(color) & mask
                  let red   = CGFloat(r) / 255.0
                  let green = CGFloat(g) / 255.0
                  let blue  = CGFloat(b) / 255.0
                  self.init(red:red, green:green, blue:blue, alpha:alpha)
              }
              func toHexString() -> String {
                  var r:CGFloat = 0
                  var g:CGFloat = 0
                  var b:CGFloat = 0
                  var a:CGFloat = 0
                  getRed(&r, green: &g, blue: &b, alpha: &a)
                  let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0
                  return String(format:"#%06x", rgb)

            }
        }

-3

이 초기화를 사용하여 간단히 수행 할 수 있습니다.

view.backgroundColor = UIColor(hex: "067AB5")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.