मैं स्विफ्ट में UIColorFromRGB का उपयोग कैसे कर सकता हूं?


110

उद्देश्य-सी में, हम इस कोड का उपयोग विचारों के लिए 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);

मैं स्विफ्ट में इसका उपयोग कैसे कर सकता हूं?


जवाबों:


169

यहाँ उस फ़ंक्शन का एक स्विफ्ट संस्करण है (एक UIntमूल्य का यूआईसीकल प्रतिनिधित्व प्राप्त करने के लिए ):

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 = 0x1f5e75 स्टैटिक लेट ब्लू: UInt = 0x3f7589 स्टेटिक लेट लाइटब्लू: UInt = 0x7fa3b0}
जेवियर कैलावा लालाविरा

129

मैं लगाना चाहता था

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

लेकिन वह काम नहीं किया।

इसलिए मैंने इस्तेमाल किया:
स्विफ्ट के लिए

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

तो यह वर्कअराउंड है जो मुझे मिला।


33
चलो रंग: UIColor = UIColor (लाल: CGFloat (0 / 255.0), हरा: CGFloat (110 / 255.0), नीला: CGFloat (255 / 255.0), अल्फा: CGFloat (1.0))
Vadym

1
यदि आपने इसे कोष्ठक (दूसरे की तरह) में रखा है, तो मूल काम किया होगा और पहले नंबर को दशमलव संख्या के रूप में "/" चिन्ह के सामने रखा है, ताकि यह पूर्णांक से कम न हो।
एंडी लेबोइट्ज

64

मुझे नैट कुक का जवाब बहुत पसंद आया लेकिन मैं कुछ और मुहावरेदार चाहता था। मेरा मानना ​​है कि कस्टम एक्स्टेंशन के माध्यम से सुविधा इनिशियलाइज़र के लिए यह वास्तव में अच्छा उपयोग मामला है।

// 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 वर्गों को बंदर पैचिंग की सलाह दूंगा, न कि पुस्तकालयों की।


मुझे आरजीबी मूल्य 0x209624 कहां मिलेगा?
कंस बोल्क्वेना

@ConsBulaquena यह सिर्फ 0xकिसी भी हेक्स रंग के बाद है - color-hex.com
bloudermilk

समझा। बहुत उपयोगी! थैंक्स @bloudermilk
Cons Bulaquena


38

कलरलैमरल का उपयोग करके प्रोग्राम को रंग जोड़ने का सबसे सरल तरीका है ।

उदाहरण में दिखाए गए अनुसार प्रॉपर्टी ColorLiteral जोड़ें, Xcode आपको उन रंगों की पूरी सूची के साथ संकेत देगा, जिन्हें आप चुन सकते हैं। ऐसा करने का लाभ कम कोड है, HEX मान या RGB जोड़ें । आपको स्टोरीबोर्ड से हाल ही में उपयोग किए गए रंग भी मिलेंगे।

उदाहरण: self.view.backgroundColor = ColorLiteralयहां छवि विवरण दर्ज करें


5
ये अद्भुत है !
वैभव सरन

इस त्वरित हाथ को साझा करने के लिए धन्यवाद .. नया शिक्षण .. :)
अमीर 10

32

यदि आप एक स्ट्रिंग से शुरू कर रहे हैं (हेक्स नहीं) तो यह एक फ़ंक्शन है जो हेक्स स्ट्रिंग लेता है और एक यूआईसीकल लौटाता है।
(आप या तो प्रारूप के साथ हेक्स स्ट्रिंग्स दर्ज कर सकते हैं: #ffffffया 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)
    )
}



स्रोत: अरशद / जिस्त: de147c42d7b3063ef7bc




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 itAnswer = false;
अलेक्जेंडर वोल्कोव

4

आरजीबी प्रारूप के लिए समाधान:

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



2

आप #define UIColorFromRGB(rgbValue)स्विफ्ट की तरह एक जटिल मैक्रोज़ का उपयोग नहीं कर सकते । स्विफ्ट में साधारण मैक्रो का प्रतिस्थापन वैश्विक स्थिरांक है

let FADE_ANIMATION_DURATION = 0.35

अभी भी जटिल मैक्रोज़ जो पैरामीटर स्वीकार करते हैं, वे स्विफ्ट द्वारा समर्थित नहीं हैं। आप इसके बजाय फ़ंक्शन का उपयोग कर सकते हैं

कॉम्प्लेक्स मैक्रोज़ का उपयोग सी और ऑब्जेक्टिव-सी में किया जाता है लेकिन स्विफ्ट में कोई समकक्ष नहीं है। कॉम्प्लेक्स मैक्रोज़ मैक्रो हैं जो स्थिरांक, फ़ंक्शन-जैसे मैक्रोज़ सहित स्थिरांक को परिभाषित नहीं करते हैं। आप सी-ऑब्जेक्टिव-सी में जटिल मैक्रोज़ का इस्तेमाल टाइप-चेकिंग की कमी से बचने के लिए या बड़ी मात्रा में बॉयलरप्लेट कोड को पुनः प्राप्त करने से बचने के लिए करते हैं। हालांकि, मैक्रोज़ डिबगिंग और रीफैक्टरिंग को मुश्किल बना सकते हैं। स्विफ्ट में, आप बिना किसी समझौते के समान परिणाम प्राप्त करने के लिए फ़ंक्शंस और जेनरिक का उपयोग कर सकते हैं। इसलिए, सी और ऑब्जेक्टिव-सी स्रोत फ़ाइलों में मौजूद जटिल मैक्रो आपके स्विफ्ट कोड के लिए उपलब्ध नहीं हैं।

कोको और उद्देश्य सी के साथ स्विफ्ट का उपयोग करने का अंश

उस फ़ंक्शन के स्विफ्ट संस्करण के लिए @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

नैट कुक का जवाब बिल्कुल सही है। अधिक लचीलेपन के लिए, मैं अपने पैक में निम्नलिखित कार्य करता हूं:

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)

आशा है कि यह मदद करेगा। सब कुछ स्विफ्ट 3 / एक्सकोड 8 के साथ परीक्षण किया गया है।


0

यह UIColor के लिए एक अच्छा विस्तार है। जब आप UIColor ऑब्जेक्ट्स बना रहे हों, तो आप enum वैल्यूज़ (हेक्स, स्ट्रिंग) और डायरेक्ट स्ट्रिंग वैल्यूज़ का उपयोग कर सकते हैं।

हमारे पास जो एक्सटेंशन है, वह https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.swift


जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो यहां उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
तोबी नरी

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)

अपडेट किया गया: हेक्स मान प्रदान करने के लिए प्रश्न के लेखक द्वारा उदाहरण के अनुसार किए गए परिवर्तन


0

स्विफ्ट 3 में, यदि आप पहले से चुने गए रंग से शुरुआत कर रहे हैं, तो आप आरजीबी मूल्य ऑनलाइन ( http://imagecolorpicker.com ) प्राप्त कर सकते हैं और उन मूल्यों का उपयोग कर सकते हैं जिन्हें यूआईसीकलर के रूप में परिभाषित किया गया है। यह समाधान उन्हें एक पृष्ठभूमि के रूप में लागू करता है:

    @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")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.