হেক্স রঙের মানগুলি কীভাবে ব্যবহার করবেন


351

আমি কয়েকটি মানক পরিবর্তে সুইফটে হেক্স রঙের মানগুলি ব্যবহার করার চেষ্টা করছি UIColor আপনাকে ব্যবহার করতে দেয় , তবে কীভাবে করব তা আমার কোনও ধারণা নেই।

উদাহরণ: আমি কীভাবে #ffffffরঙ হিসাবে ব্যবহার করব ?


1
#ffffffহেক্সাডেসিমাল নোটেশনে আসলে 3 টি রঙের উপাদান - লাল ff, সবুজ ffএবং নীল ff। আপনি 0xপ্রিফিক্স ব্যবহার করে সুইফটে হেক্সাডেসিমাল নোটেশন লিখতে পারেন 0xFF
সুলতান

1
এখানে উত্তর আপনাকে stackoverflow.com/questions/24196528/… সাহায্য করতে হবে ।
বুরাঞ্জার

উত্তর:


691

#ffffffহেক্সাডেসিমাল নোটেশনে আসলে 3 টি রঙের উপাদান - লাল ff, সবুজ ffএবং নীল ff। আপনি 0xপ্রিফিক্স ব্যবহার করে সুইফটে হেক্সাডেসিমাল নোটেশন লিখতে পারেন0xFF

রূপান্তরটি সহজ করতে, আসুন একটি ইনিশিয়ালাইজার তৈরি করুন যা পূর্ণসংখ্যার (0 - 255) মান নেয়:

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

ব্যবহার:

let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF)
let color2 = UIColor(rgb: 0xFFFFFF)

কিভাবে আলফা পেতে?

আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে আপনি কেবল স্থানীয় UIColor.withAlphaComponentপদ্ধতি ব্যবহার করতে পারেন , যেমন eg

let semitransparentBlack = UIColor(rgb: 0x000000).withAlphaComponent(0.5)

অথবা আপনি উপরের পদ্ধতিগুলিতে একটি অতিরিক্ত (alচ্ছিক) পরামিতি যুক্ত করতে পারেন:

convenience init(red: Int, green: Int, blue: Int, a: CGFloat = 1.0) {
    self.init(
        red: CGFloat(red) / 255.0,
        green: CGFloat(green) / 255.0,
        blue: CGFloat(blue) / 255.0,
        alpha: a
    )
}

convenience init(rgb: Int, a: CGFloat = 1.0) {
    self.init(
        red: (rgb >> 16) & 0xFF,
        green: (rgb >> 8) & 0xFF,
        blue: rgb & 0xFF,
        a: a
    )
}

( alphaবিদ্যমান প্রাথমিকের সাথে নাম সংঘর্ষের কারণে আমরা প্যারামিটারটির নাম রাখতে পারি না )।

নামে পরিচিত:

let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0.5)
let color2 = UIColor(rgb: 0xFFFFFF, a: 0.5)

একটি পূর্ণসংখ্যা 0-255 হিসাবে আলফা পেতে, আমরা এটি করতে পারি

convenience init(red: Int, green: Int, blue: Int, a: Int = 0xFF) {
    self.init(
        red: CGFloat(red) / 255.0,
        green: CGFloat(green) / 255.0,
        blue: CGFloat(blue) / 255.0,
        alpha: CGFloat(a) / 255.0
    )
}

// let's suppose alpha is the first component (ARGB)
convenience init(argb: Int) {
    self.init(
        red: (argb >> 16) & 0xFF,
        green: (argb >> 8) & 0xFF,
        blue: argb & 0xFF,
        a: (argb >> 24) & 0xFF
    )
}

হিসাবে ডাকা হয়

let color = UIColor(red: 0xFF, green: 0xFF, blue: 0xFF, a: 0xFF)
let color2 = UIColor(argb: 0xFFFFFFFF)

বা পূর্ববর্তী পদ্ধতির সংমিশ্রণ। স্ট্রিংগুলি ব্যবহার করার প্রয়োজন নেই।


113
দুর্দান্ত সমাধান! কেন পৃথিবীতে অ্যাপলের ইতিমধ্যে এমন কিছু থাকবে না ????
অলিভার স্প্রিন

1
@ কনফিলে না, কারণ এটি মানক নয়। আলফা প্রথম উপাদান বা শেষ হতে পারে। আপনার যদি আলফা দরকার হয় তবে একটি প্যারামিটার যুক্ত করুনalpha
সুলতান

4
একই সমাধান, আলফা সহায়তার সাথে সুইফট 1.2 সামঞ্জস্যপূর্ণ: gist.github.com/berikv/ecf1f79c5bc9921c47ef
বেরিক

1
আপনার ইনটগুলি 0 ... 255 এর সীমার মধ্যে রয়েছে তা জোর করে UInt8 ব্যবহার করবেন না কেন?
রিচার্ড ভেনেবল

5
এটি 2017, এবং অ্যাপলের কাছে এখনও এর মতো কিছু নেই।
আনবিস

351

এটি এমন একটি ফাংশন যা একটি হেক্স স্ট্রিং নেয় এবং একটি ইউআইসিওলর প্রদান করে।
(আপনি দুটি ফর্ম্যাট সহ হেক্স স্ট্রিং প্রবেশ করতে পারেন: #ffffffবা ffffff)

ব্যবহার:

var color1 = hexStringToUIColor("#d3d3d3")

সুইফট 5: (সুইফ্ট 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:UInt64 = 0
    Scanner(string: cString).scanHexInt64(&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

সম্পাদনা করুন: কোড আপডেট হয়েছে। ধন্যবাদ, হ্লুং, জয়ট্রিক্স, আহমেদ এফ, কেঘাম কে, এবং অ্যাডাম ওয়েইট!


countelementsএখন স্রেফ count:)
হ্লুং

@ হালং এবং @থ্যানস্ট্রাইডার দেখে মনে হচ্ছে তারা আপনার countপরিবর্তে এখন আপনাকে কী করতে দেয় না countElements, তারা আমাদের কী ব্যবহার করতে চায় কোনও ধারণা?
এসআরএমআর

2
কোড এই লাইন পরিবর্তিত cString = cString.substringFromIndex(advance(cString.startIndex, 1))করতে cString = cString.substringFromIndex(cString.startIndex.advancedBy(1))7.3 সুইফট 2.2 Xcode জন্য
jaytrixz

1
আপনি যদি এখনও আইওএস 11 এর আগে আইফোন 5 বা কোনও 32 বিট ডিভাইস সমর্থন করছেন তবে এটি ক্র্যাশ হয়ে যাবে। আপনাকে এতে পরিবর্তন করতে UInt32হবেUInt64
কেঘাম কে।

1
এক্সকোড 11 এবং আইওএস 13 এসডিকে ছাড়ছে scanHexInt32। এর পরিবর্তে একটি UInt64এবং scanHexInt64ব্যবহার করুন।
অ্যাডাম

190

সুইফ্ট 5 (সুইফ্ট 4, সুইফ্ট 3) ইউআইকোলোর এক্সটেনশন:

extension UIColor {
    convenience init(hexString: String) {
        let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int = UInt64()
        Scanner(string: hex).scanHexInt64(&int)
        let a, r, g, b: UInt64
        switch hex.count {
        case 3: // RGB (12-bit)
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8: // ARGB (32-bit)
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            (a, r, g, b) = (255, 0, 0, 0)
        }
        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
    }
}

ব্যবহার :

let darkGrey = UIColor(hexString: "#757575")

সুইফট 2.x সংস্করণ:

extension UIColor {
    convenience init(hexString: String) {
        let hex = hexString.stringByTrimmingCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet)
        var int = UInt32()
        NSScanner(string: hex).scanHexInt(&int)
        let a, r, g, b: UInt32
        switch hex.characters.count {
        case 3: // RGB (12-bit)
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8: // ARGB (32-bit)
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            (a, r, g, b) = (255, 0, 0, 0)
        }
        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
    }
}

1
এটি আমার পছন্দসই বাস্তবায়ন কারণ এটি 3 কেস পরিচালনা করে। তবে আমি ডিফল্টটিকে পছন্দ করি: সাদা পরিবর্তে শূন্যের দিকে ফিরে আসা।
রিচার্ড ভেনেবল

যাইহোক, এই বাস্তবায়নের ক্ষেত্রে ডিফল্ট কেসটি ইউআইক্লোর.আইলো ()
গুই

আমি এটি ব্যবহার করতে জানি এবং এটি একটি কবজ মত কাজ করে। তবে কেন আসলে তা বুঝতে পারছি না। হয়তো কেউ আমাকে ব্যাখ্যা বা কিছু ভাল লিঙ্ক / শব্দ অনুসন্ধান করতে পারেন?
কুজডু

2
এটি আলফা মানগুলির সাথে সঠিকভাবে কাজ করে না। উদাহরণস্বরূপ "ff00ff00" এবং "# ff00ff00" উভয় ইনপুট 0 1 0 ১ এর একটি আরজিবিএ আউটপুট দেবে (এটি হওয়া উচিত 1 0 1 0)। "# Ff00ff" ইনপুটটি 1 0 1 1-এ ফলাফল দেয় যা সঠিক। (এক্সকোড 8.2.1, আইওএস 9.3।)
ওম্বল

2
@ ওম্বল প্রথম উপাদানটি আলফা সর্বশেষটি নয়। সুতরাং "# ff00ff00" শুরুতে "ff" এর কারণে আলফা 1 রয়েছে। আমি মনে করি আপনি "# 00ff00ff" বোঝাতে চেয়েছিলেন। আর একটি উদাহরণ: "# ff00ff00" এটি আলফা 1 এর সাথে সবুজ, "# 0000ff00" এটি আলফা 0 দিয়ে সবুজ
লুকা তোরেলা

76

UIColor:

extension UIColor {

    convenience init(hex: Int) {
        let components = (
            R: CGFloat((hex >> 16) & 0xff) / 255,
            G: CGFloat((hex >> 08) & 0xff) / 255,
            B: CGFloat((hex >> 00) & 0xff) / 255
        )
        self.init(red: components.R, green: components.G, blue: components.B, alpha: 1)
    }

}

CGColor:

extension CGColor {

    class func colorWithHex(hex: Int) -> CGColorRef {

        return UIColor(hex: hex).CGColor

    }

}

ব্যবহার

let purple = UIColor(hex: 0xAB47BC)

5
আমার নম্র মতামতে, আমি এটি ব্যবহার করা সবচেয়ে সহজ এবং অন্যান্য উত্তরের তুলনায় খুব পরিষ্কার পেয়েছি।
থানডাসুরু

1
আপনি কিভাবে 123ABC পরিচালনা করবেন? সংকলকটি এটির অঙ্ক না হয়ে বার্কিং করছে।
ইসলাম Q.

1
সম্পূর্ণতার জন্য: let foo: Int = 0x123ABC- '0x'
কার্স্টেন

হায়রে, অন্যান্য হেক্স রূপান্তরকারীদের মতো এটি আলফা উপাদানগুলি পরিচালনা করে না। সুতরাং, উদাহরণস্বরূপ, আপনি এটি থেকে কোনও ইউআইক্লোর.ক্রিয়ার মান পেতে পারবেন না value
ওম্বল

1
যদিও এটি আলফা @ ওম্বলকে পরিচালনা করে না, এটি যুক্ত করা তুচ্ছ। সুইফ্ট সংকলকটিকে "বেশি সময় নেওয়া" এবং হাল ছেড়ে দেওয়ার জন্য আমাকে "উপাদানগুলির" জন্য একটি সুস্পষ্ট প্রকার সেট করতে হয়েছিল।
নরম্যান

43

সুইফট 4 : সুলতান এবং লুকা তোরেেলার উত্তরগুলির সংমিশ্রণ:

extension UIColor {
    convenience init(hexFromString:String, alpha:CGFloat = 1.0) {
        var cString:String = hexFromString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
        var rgbValue:UInt32 = 10066329 //color #999999 if string has wrong format

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

        if ((cString.count) == 6) {
            Scanner(string: cString).scanHexInt32(&rgbValue)
        }

        self.init(
            red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
            alpha: alpha
        )
    }
}

ব্যবহারের উদাহরণ:

let myColor = UIColor(hexFromString: "4F9BF5")

let myColor = UIColor(hexFromString: "#4F9BF5")

let myColor = UIColor(hexFromString: "#4F9BF5", alpha: 0.5)

এখনও সুইফট ৪.০ এবং
তারপরে

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, আপনাকে অনেক ধন্যবাদ।
কেহান কামাঙ্গার

24

সুইফট 2.0 এবং এক্সকোড 7.0.1 এর সাহায্যে আপনি এই ফাংশনটি তৈরি করতে পারেন:

    // Creates a UIColor from a Hex string.
    func colorWithHexString (hex:String) -> UIColor {
        var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

        if (cString.hasPrefix("#")) {
            cString = (cString as NSString).substringFromIndex(1)
        }

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

        let rString = (cString as NSString).substringToIndex(2)
        let gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2)
        let bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2)

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        NSScanner(string: rString).scanHexInt(&r)
        NSScanner(string: gString).scanHexInt(&g)
        NSScanner(string: bString).scanHexInt(&b)


        return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
    }

এবং তারপরে এটি ব্যবহার করুন:

let color1 = colorWithHexString("#1F437C")

সুইফট 4 এর জন্য আপডেট হয়েছে

func colorWithHexString (hex:String) -> UIColor {

    var cString = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString = (cString as NSString).substring(from: 1)
    }

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

    let rString = (cString as NSString).substring(to: 2)
    let gString = ((cString as NSString).substring(from: 2) as NSString).substring(to: 2)
    let bString = ((cString as NSString).substring(from: 4) as NSString).substring(to: 2)

    var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
    Scanner(string: rString).scanHexInt32(&r)
    Scanner(string: gString).scanHexInt32(&g)
    Scanner(string: bString).scanHexInt32(&b)


    return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
}

22

সুইফ্ট 5.1: ইউআইকোলোরের মাধ্যমে হেক্স এবং সিএসএস রঙের নাম সমর্থন

গিস্ট কোড

সুইফট প্যাকেজ

উদাহরণস্বরূপ স্ট্রিংস:

  • Orange, Lime, Tomato, ইত্যাদি
  • Clear, Transparent, nil, এবং খালি স্ট্রিং ফলন[UIColor clearColor]
  • abc
  • abc7
  • #abc7
  • 00FFFF
  • #00FFFF
  • 00FFFF77

খেলার মাঠের আউটপুট: খেলার মাঠের আউটপুট


17

প্রোগ্রামালিমে রঙ যুক্ত করার সহজ উপায় হ'ল কালারলিটারাল ব্যবহার করে ।

উদাহরণ হিসাবে দেখানো হয়েছে এমন বৈশিষ্ট্য হিসাবে কেবল কালারলিটারাল যুক্ত করুন, এক্সকোড আপনাকে বেছে নিতে পারে এমন রঙের একটি পুরো তালিকা নিয়ে অনুরোধ করবে। এটি করার সুবিধাটি হ'ল কম কোড, এইচএক্স মান বা আরজিবি যোগ করুন । আপনি স্টোরিবোর্ড থেকে সম্প্রতি ব্যবহৃত রঙগুলিও পাবেন।

উদাহরণ: স্ব.ভিউ.ব্যাকগ্রাউন্ড কালার = কালারলিটারাল এখানে চিত্র বর্ণনা লিখুন


2
কি দারুন! আপনি চ্যাম্প ... আমি খুব সহজ সমাধানের সন্ধান করছিলাম ... এটি হ'ল ... চিয়ার্স ...
jeet.chanchawat

1
এটি দরকারী!
ব্র্যাড থমাস

1
রঙটি গতিশীলভাবে সেট না করা থাকলে বর্তমানে সবচেয়ে সহজ এবং সর্বোত্তম সমাধান
পিনি চেনি

16

সতর্কতা "'স্ক্যানহেক্সআইন্ট 32' আইওএস 13.0 এ অবমূল্যায়িত হয়েছিল" ঠিক করা হয়েছিল।

নমুনাটি Swift2.2 এবং এর উপরে (Swift2.x, Swift3.x, Swift4.x, Swift5.x) উপর কাজ করা উচিত:

extension UIColor {

    // hex sample: 0xf43737
    convenience init(_ hex: Int, alpha: Double = 1.0) {
        self.init(red: CGFloat((hex >> 16) & 0xFF) / 255.0, green: CGFloat((hex >> 8) & 0xFF) / 255.0, blue: CGFloat((hex) & 0xFF) / 255.0, alpha: CGFloat(255 * alpha) / 255)
    }

    convenience init(_ hexString: String, alpha: Double = 1.0) {
        let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int = UInt64()
        Scanner(string: hex).scanHexInt64(&int)

        let r, g, b: UInt64
        switch hex.count {
        case 3: // RGB (12-bit)
            (r, g, b) = ((int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (r, g, b) = (int >> 16, int >> 8 & 0xFF, int & 0xFF)
        default:
            (r, g, b) = (1, 1, 0)
        }

        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(255 * alpha) / 255)
    }

    convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1) {
        self.init(red: (r / 255), green: (g / 255), blue: (b / 255), alpha: a)
    }
}

নীচের মত এগুলি ব্যবহার করুন:

UIColor(0xF54A45)
UIColor(0xF54A45, alpha: 0.7)
UIColor("#f44")
UIColor("#f44", alpha: 0.7)
UIColor("#F54A45")
UIColor("#F54A45", alpha: 0.7)
UIColor("F54A45")
UIColor("F54A45", alpha: 0.7)
UIColor(r: 245.0, g: 73, b: 69)
UIColor(r: 245.0, g: 73, b: 69, a: 0.7)

এখানে চিত্র বর্ণনা লিখুন


'scanHexInt32' আইওএস 13.0-এ অসমর্থিত হয়েছে
Dimitar Stefanovski

@ দিমিতর স্টেফানভস্কি আমি এটি স্থির করেছি।
রানীনিজ

15

এই উত্তরটি ওবজ-সি-তে এটি কীভাবে করবেন তা দেখায়। ব্রিজটি ব্যবহার করতে হয়

let rgbValue = 0xFFEEDD
let r = Float((rgbValue & 0xFF0000) >> 16)/255.0
let g = Float((rgbValue & 0xFF00) >> 8)/255.0
let b = Float((rgbValue & 0xFF))/255.0
self.backgroundColor = UIColor(red:r, green: g, blue: b, alpha: 1.0)

8

আমি উত্তরগুলির এই থ্রেড থেকে কয়েকটি ধারণা একত্রিত করেছি এবং এটি iOS 13 এবং সুইফট 5 এর জন্য আপডেট করেছি ।

extension UIColor {

  convenience init(hex: String, alpha: CGFloat = 1.0) {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) { cString.removeFirst() }

    if ((cString.count) != 6) {
      self.init(hex: "ff0000") // return red color for wrong hex input
      return
    }

    var rgbValue: UInt64 = 0
    Scanner(string: cString).scanHexInt64(&rgbValue)

    self.init(red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
              green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
              blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
              alpha: alpha)
  }

}

তারপরে আপনি এটির মতো এটি ব্যবহার করতে পারেন:

UIColor(hex: "#ff0000") // with #
UIColor(hex: "ff0000")  // without #
UIColor(hex: "ff0000", alpha: 0.5) // using optional alpha value

7

সুইফট 5: আপনি নিম্নলিখিত দুটি ছবিতে বর্ণিত হিসাবে এক্সকোডে রঙ তৈরি করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

আপনার রঙটির নাম রাখা উচিত কারণ আপনি নামটি দিয়ে রঙটি উল্লেখ করেছেন। ছবি 2 তে প্রদর্শিত হয়েছে:

এখানে চিত্র বর্ণনা লিখুন


2
আমি বুঝতে পারি নি যে আপনি রঙগুলি সম্পদ হিসাবে সংজ্ঞায়িত করতে পারেন। সত্যিই খুশি হলাম আমি এই উত্তরটি পেয়েছি!
জাস্টিন

6

আরেকটি পদ্ধতি

সুইফট 3.0

ইউ আই সি কালোর জন্য একটি এক্সটেনশন লিখুন

// To change the HexaDecimal value to Corresponding Color
extension UIColor
{
    class func uicolorFromHex(_ rgbValue:UInt32, alpha : CGFloat)->UIColor

    {
        let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0
        let green = CGFloat((rgbValue & 0xFF00) >> 8) / 255.0
        let blue = CGFloat(rgbValue & 0xFF) / 255.0
        return UIColor(red:red, green:green, blue:blue, alpha: alpha)
    }
}

আপনি সরাসরি এই জাতীয় হেক্সের সাহায্যে ইউআইকলার তৈরি করতে পারেন

let carrot = UIColor.uicolorFromHex(0xe67e22, alpha: 1))

5

সর্বশেষতম সুইফট 3 সংস্করণ

        extension UIColor {
convenience init(hexString: String) {
    let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
    var int = UInt32()
    Scanner(string: hex).scanHexInt32(&int)
    let a, r, g, b: UInt32
    switch hex.characters.count {
    case 3: // RGB (12-bit)
        (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
    case 6: // RGB (24-bit)
        (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
    case 8: // ARGB (32-bit)
        (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
    default:
        (a, r, g, b) = (255, 0, 0, 0)
    }
      self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue:      CGFloat(b) / 255, alpha: CGFloat(a) / 255)
}
}

আপনার শ্রেণিতে ব্যবহার করুন বা যেখানে আপনি কখনও কখনও এই জাতীয় উপায়ে ইউক্লোরে রূপান্তর করেছেন x

             let color1 = UIColor(hexString: "#FF323232")

5

আমি যা ব্যবহার করছি তা এখানে। # চিহ্ন সহ বা ছাড়াই 6 এবং 8 টি বর্ণের রঙের স্ট্রিং সহ কাজ করে। অবৈধ স্ট্রিংয়ের সাথে আরম্ভ করা হলে রিলিজে কালোতে ডিফল্ট এবং ডিবাগে ক্র্যাশ হয়।

extension UIColor {
    public convenience init(hex: String) {
        var r: CGFloat = 0
        var g: CGFloat = 0
        var b: CGFloat = 0
        var a: CGFloat = 1

        let hexColor = hex.replacingOccurrences(of: "#", with: "")
        let scanner = Scanner(string: hexColor)
        var hexNumber: UInt64 = 0
        var valid = false

        if scanner.scanHexInt64(&hexNumber) {
            if hexColor.count == 8 {
                r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
                g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
                b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
                a = CGFloat(hexNumber & 0x000000ff) / 255
                valid = true
            }
            else if hexColor.count == 6 {
                r = CGFloat((hexNumber & 0xff0000) >> 16) / 255
                g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255
                b = CGFloat(hexNumber & 0x0000ff) / 255
                valid = true
            }
        }

        #if DEBUG
            assert(valid, "UIColor initialized with invalid hex string")
        #endif

        self.init(red: r, green: g, blue: b, alpha: a)
    }
}

ব্যবহার:

UIColor(hex: "#75CC83FF")
UIColor(hex: "75CC83FF")
UIColor(hex: "#75CC83")
UIColor(hex: "75CC83")

4

এখানে একটি সুইফট এক্সটেনশানটিতে UIColorএকটি হেক্স স্ট্রিং লাগে:

import UIKit

extension UIColor {

    convenience init(hexString: String) {
        // Trim leading '#' if needed
        var cleanedHexString = hexString
        if hexString.hasPrefix("#") {
//            cleanedHexString = dropFirst(hexString) // Swift 1.2
            cleanedHexString = String(hexString.characters.dropFirst()) // Swift 2
        }

        // String -> UInt32
        var rgbValue: UInt32 = 0
        NSScanner(string: cleanedHexString).scanHexInt(&rgbValue)

        // UInt32 -> R,G,B
        let red = CGFloat((rgbValue >> 16) & 0xff) / 255.0
        let green = CGFloat((rgbValue >> 08) & 0xff) / 255.0
        let blue = CGFloat((rgbValue >> 00) & 0xff) / 255.0

        self.init(red: red, green: green, blue: blue, alpha: 1.0)
    }

}

1
প্রথমে ড্রপ কি?
কিশোর কুমার

4
public static 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) {

        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)
        )
    }else if ((cString.characters.count) == 8) {

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

        return UIColor(
            red: CGFloat((rgbValue & 0x00FF0000) >> 16) / 255.0,
            green: CGFloat((rgbValue & 0x0000FF00) >> 8) / 255.0,
            blue: CGFloat(rgbValue & 0x000000FF) / 255.0,
            alpha: CGFloat((rgbValue & 0xFF000000) >> 24) / 255.0
        )
    }else{
        return UIColor.gray
    }
}

ব্যবহারবিধি

var color: UIColor = hexStringToUIColor(hex: "#00ff00"); // Without transparency
var colorWithTransparency: UIColor = hexStringToUIColor(hex: "#dd00ff00"); // With transparency

4

বৈধতা সহ হেক্স

এডুয়ার্ডো উত্তরের ভিত্তিতে

বিস্তারিত

  • এক্সকোড 10.0, সুইফট 4.2
  • এক্সকোড 10.2.1 (10E1001), সুইফট 5

সমাধান

import UIKit

extension UIColor {

    convenience init(r: UInt8, g: UInt8, b: UInt8, alpha: CGFloat = 1.0) {
        let divider: CGFloat = 255.0
        self.init(red: CGFloat(r)/divider, green: CGFloat(g)/divider, blue: CGFloat(b)/divider, alpha: alpha)
    }

    private convenience init(rgbWithoutValidation value: Int32, alpha: CGFloat = 1.0) {
        self.init(
            r: UInt8((value & 0xFF0000) >> 16),
            g: UInt8((value & 0x00FF00) >> 8),
            b: UInt8(value & 0x0000FF),
            alpha: alpha
        )
    }

    convenience init?(rgb: Int32, alpha: CGFloat = 1.0) {
        if rgb > 0xFFFFFF || rgb < 0 { return nil }
        self.init(rgbWithoutValidation: rgb, alpha: alpha)
    }

    convenience init?(hex: String, alpha: CGFloat = 1.0) {
        var charSet = CharacterSet.whitespacesAndNewlines
        charSet.insert("#")
        let _hex = hex.trimmingCharacters(in: charSet)
        guard _hex.range(of: "^[0-9A-Fa-f]{6}$", options: .regularExpression) != nil else { return nil }
        var rgb: UInt32 = 0
        Scanner(string: _hex).scanHexInt32(&rgb)
        self.init(rgbWithoutValidation: Int32(rgb), alpha: alpha)
    }
}

ব্যবহার

let alpha: CGFloat = 1.0

// Hex
print(UIColor(rgb: 0x4F9BF5) ?? "nil")
print(UIColor(rgb: 0x4F9BF5, alpha: alpha) ?? "nil")
print(UIColor(rgb: 5217269) ?? "nil")
print(UIColor(rgb: -5217269) ?? "nil")                  // = nil
print(UIColor(rgb: 0xFFFFFF1) ?? "nil")                 // = nil

// String
print(UIColor(hex: "4F9BF5") ?? "nil")
print(UIColor(hex: "4F9BF5", alpha: alpha) ?? "nil")
print(UIColor(hex: "#4F9BF5") ?? "nil")
print(UIColor(hex: "#4F9BF5", alpha: alpha) ?? "nil")
print(UIColor(hex: "#4F9BF56") ?? "nil")                // = nil
print(UIColor(hex: "#blabla") ?? "nil")                 // = nil

// RGB
print(UIColor(r: 79, g: 155, b: 245))
print(UIColor(r: 79, g: 155, b: 245, alpha: alpha))
//print(UIColor(r: 792, g: 155, b: 245, alpha: alpha))  // Compiler will throw an error, r,g,b = [0...255]

2
আপনার NSPredicateকেবল নিয়মিত অভিব্যক্তি পরীক্ষা করার দরকার নেই । string.range(of: pattern, options: .regularExpression)খুব কাজ করে।
সুলতান

2

আপনি এটি সুইফট 5 এ ব্যবহার করতে পারেন

সুইফট 5

import UIKit

extension UIColor {
    static 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)
        )
    }
}

1

সুইফট ২.০:

দ্য ডিডলয়েডে ()

 var viewColor:UIColor
    viewColor = UIColor()
    let colorInt:UInt
    colorInt = 0x000000
    viewColor = UIColorFromRGB(colorInt)
    self.View.backgroundColor=viewColor



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

তুমি আমার দিন বাঁচিয়েছ, সাথী!
oskarko

1

সুইফট 5

extension UIColor{

/// Converting hex string to UIColor
///
/// - Parameter hexString: input hex string
convenience init(hexString: String) {
    let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
    var int = UInt64()
    Scanner(string: hex).scanHexInt64(&int)
    let a, r, g, b: UInt64
    switch hex.count {
    case 3:    
        (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
    case 6: 
        (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
    case 8: 
        (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
    default:
        (a, r, g, b) = (255, 0, 0, 0)
    }
    self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
}
}

ইউআইকলার (হেক্সস্ট্রিং: "আপনার হেক্স স্ট্রিং") ব্যবহার করে কল করুন


1

সুইফট 5 / সুইফটুআইয়ের জন্য সাধারণ রঙ এক্সটেনশন

উদাহরণ:

let myColor = Color(hex:0xF2C94C)

কোড:

import Foundation
import SwiftUI

extension UIColor {
    convenience init(hex: Int) {
        let components = (
            R: CGFloat((hex >> 16) & 0xff) / 255,
            G: CGFloat((hex >> 08) & 0xff) / 255,
            B: CGFloat((hex >> 00) & 0xff) / 255
        )
        self.init(red: components.R, green: components.G, blue: components.B, alpha: 1)
    }
}

extension Color {
    public init(hex: Int) {
        self.init(UIColor(hex: hex))
   }
}

0

7 টি হেক্স রঙের প্রকারকে সমর্থন করছে

7 টি হেক্স রঙের ফর্ম্যাট রয়েছে: "" # # FF0000 "," 0xFF0000 "," FF0000 "," F00 "," লাল ", 0x00FF00, 16711935

NSColorParser.nsColor("#FF0000",1)//red nsColor
NSColorParser.nsColor("FF0",1)//red nsColor
NSColorParser.nsColor("0xFF0000",1)//red nsColor
NSColorParser.nsColor("#FF0000",1)//red nsColor
NSColorParser.nsColor("FF0000",1)//red nsColor
NSColorParser.nsColor(0xFF0000,1)//red nsColor
NSColorParser.nsColor(16711935,1)//red nsColor

সতর্কতা: এটি "ওয়ান-ফাইল-সমাধান" নয়, কিছু নির্ভরশীলতা রয়েছে, তবে এগুলি স্ক্র্যাচ থেকে গবেষণা করার চেয়ে দ্রুত শিকার হতে পারে।

https://github.com/eonist/swift-utils/blob/2882002682c4d2a3dc7cb3045c45f66ed59d566d/geom/color/NSColorParser.swift

পার্মালিঙ্ক:
https://github.com/eonist/Element/wiki/Progress#supporting-7-hex-color-tyype


0

সুইফট ২.০

নীচের কোডটি এক্সকোড 7.2 তে পরীক্ষা করা হয়েছে

import UIKit
extension UIColor{

    public convenience init?(colorCodeInHex: String, alpha: Float = 1.0){

        var filterColorCode:String =  colorCodeInHex.stringByReplacingOccurrencesOfString("#", withString: "")

        if  filterColorCode.characters.count != 6 {
            self.init(red: 0.0, green: 0.0, blue: 0.0, alpha: CGFloat(alpha))
            return
        }

        filterColorCode = filterColorCode.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

        var range = Range(start: filterColorCode.startIndex.advancedBy(0), end: filterColorCode.startIndex.advancedBy(2))
        let rString = filterColorCode.substringWithRange(range)

        range = Range(start: filterColorCode.startIndex.advancedBy(2), end: filterColorCode.startIndex.advancedBy(4))
        let gString = filterColorCode.substringWithRange(range)


        range = Range(start: filterColorCode.startIndex.advancedBy(4), end: filterColorCode.startIndex.advancedBy(6))
        let bString = filterColorCode.substringWithRange(range)

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        NSScanner(string: rString).scanHexInt(&r)
        NSScanner(string: gString).scanHexInt(&g)
        NSScanner(string: bString).scanHexInt(&b)


        self.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(alpha))
        return
    }
}

0

সুইফট ২.০:

ইউ আই সি কালোর একটি এক্সটেনশন করুন।

extension UIColor {
    convenience init(hexString:String) {
        let hexString:NSString = hexString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
        let scanner            = NSScanner(string: hexString as String)
        if (hexString.hasPrefix("#")) {
            scanner.scanLocation = 1
        }

        var color:UInt32 = 0
        scanner.scanHexInt(&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:1)
    }

    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 NSString(format:"#%06x", rgb) as String
    }

}

ব্যবহার:

//Hex to Color
    let countPartColor =  UIColor(hexString: "E43038")

//Color to Hex
let colorHexString =  UIColor(red: 228, green: 48, blue: 56, alpha: 1.0).toHexString()

1
সদৃশ উত্তর পোস্ট করা এড়াতে দয়া করে । যদি কোনও প্রশ্নটি সদৃশ হয় তবে উত্তর দেওয়ার পরিবর্তে এটিকে ফ্ল্যাগ করুন। ধন্যবাদ.
এরিক আয়া

0

দ্রুত 3 জন্য

extension String {
    var hexColor: UIColor {        
        let hex = trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int = UInt32()       
        Scanner(string: hex).scanHexInt32(&int)
        let a, r, g, b: UInt32
        switch hex.characters.count {
        case 3: // RGB (12-bit)
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8: // ARGB (32-bit)
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            return .clear
        }
        return UIColor(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
    }
}

0

আপনি এই এক্সটেনশানটি ইউআইসিওলরে ব্যবহার করতে পারেন যা আপনার স্ট্রিংকে (হেক্সাডেসিমাল, আরজিবিএ) ইউআইকিলোরে রূপান্তর করে এবং বিপরীতে।

extension UIColor {

  //Convert RGBA String to UIColor object
  //"rgbaString" must be separated by space "0.5 0.6 0.7 1.0" 50% of Red 60% of Green 70% of Blue Alpha 100%
  public convenience init?(rgbaString : String){
      self.init(ciColor: CIColor(string: rgbaString))
  }

  //Convert UIColor to RGBA String
  func toRGBAString()-> String {
    var r: CGFloat = 0
    var g: CGFloat = 0
    var b: CGFloat = 0
    var a: CGFloat = 0
    self.getRed(&r, green: &g, blue: &b, alpha: &a)
    return "\(r) \(g) \(b) \(a)"
  }

  //return UIColor from Hexadecimal Color string
  public convenience init?(hexString: String) {  
    let r, g, b, a: CGFloat

    if hexString.hasPrefix("#") {
      let start = hexString.index(hexString.startIndex, offsetBy: 1)
      let hexColor = hexString.substring(from: start)

      if hexColor.characters.count == 8 {
        let scanner = Scanner(string: hexColor)
        var hexNumber: UInt64 = 0

        if scanner.scanHexInt64(&hexNumber) {
          r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
          g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
          b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
          a = CGFloat(hexNumber & 0x000000ff) / 255
          self.init(red: r, green: g, blue: b, alpha: a)
          return
        }
      }
    }

    return nil
  }

  // Convert UIColor to Hexadecimal String
  func toHexString() -> String {
    var r: CGFloat = 0
    var g: CGFloat = 0
    var b: CGFloat = 0
    var a: CGFloat = 0
    self.getRed(&r, green: &g, blue: &b, alpha: &a)
    return String(
        format: "%02X%02X%02X",
        Int(r * 0xff),
        Int(g * 0xff),
        Int(b * 0xff))
  }
}

আলফা হেক্স স্ট্রিং ()
Womble

0

ইউআইক্লোর এক্সটেনশন, এটি আপনাকে ব্যাপকভাবে সহায়তা করবে! (সংস্করণ :সুইফট ৪.০ )

import UIKit
extension UIColor {
/// rgb颜色
convenience init(r: CGFloat, g: CGFloat, b: CGFloat) {
    self.init(red: r/255.0 ,green: g/255.0 ,blue: b/255.0 ,alpha:1.0)
}

/// 纯色(用于灰色)
convenience init(gray: CGFloat) {
    self.init(red: gray/255.0 ,green: gray/255.0 ,blue: gray/255.0 ,alpha:1.0)
}
/// 随机色
class func randomCGColor() -> UIColor {
    return UIColor(r: CGFloat(arc4random_uniform(256)), g: CGFloat(arc4random_uniform(256)), b: CGFloat(arc4random_uniform(256)))
}

/// hex颜色-Int
convenience init(hex:Int, alpha:CGFloat = 1.0) {
    self.init(
        red:   CGFloat((hex & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((hex & 0x00FF00) >> 8)  / 255.0,
        blue:  CGFloat((hex & 0x0000FF) >> 0)  / 255.0,
        alpha: alpha
    )
}
/// hex颜色-String
convenience init(hexString: String){
    var red:   CGFloat = 0.0
    var green: CGFloat = 0.0
    var blue:  CGFloat = 0.0
    var alpha: CGFloat = 1.0
    let scanner = Scanner(string: hexString)
    var hexValue: CUnsignedLongLong = 0
    if scanner.scanHexInt64(&hexValue) {
        switch (hexString.characters.count) {
        case 3:
            red   = CGFloat((hexValue & 0xF00) >> 8)       / 15.0
            green = CGFloat((hexValue & 0x0F0) >> 4)       / 15.0
            blue  = CGFloat(hexValue & 0x00F)              / 15.0
        case 4:
            red   = CGFloat((hexValue & 0xF000) >> 12)     / 15.0
            green = CGFloat((hexValue & 0x0F00) >> 8)      / 15.0
            blue  = CGFloat((hexValue & 0x00F0) >> 4)      / 15.0
            alpha = CGFloat(hexValue & 0x000F)             / 15.0
        case 6:
            red   = CGFloat((hexValue & 0xFF0000) >> 16)   / 255.0
            green = CGFloat((hexValue & 0x00FF00) >> 8)    / 255.0
            blue  = CGFloat(hexValue & 0x0000FF)           / 255.0
        case 8:
            alpha = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0
            red   = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0
            green = CGFloat((hexValue & 0x0000FF00) >> 8)  / 255.0
            blue  = CGFloat(hexValue & 0x000000FF)         / 255.0
        default:
            log.info("Invalid RGB string, number of characters after '#' should be either 3, 4, 6 or 8")
        }
    } else {
        log.error("Scan hex error")
    }
    self.init(red:red, green:green, blue:blue, alpha:alpha)
}}

আগের উত্তরগুলির সংমিশ্রণ মাত্র।
সুলতান

0

আরজিবিএ সংস্করণ সুইফ্ট 3/4

আমি @ লুকার উত্তরটি পছন্দ করি কারণ আমি মনে করি এটি সবচেয়ে মার্জিত।

তবে আমি চাই না যে আমার রঙগুলি এআরজিবিতে নির্দিষ্ট করা আছে। " আরএফএফএএফএফএফএএফএএফএএফএএফএএফএএফএএফএএফএএফএএফএএফএএফএএফএফএএর জন্য প্রতিটি চরিত্রের জন্য 1 টি অক্ষর নির্দিষ্ট করে এমন স্ট্রিংগুলি ব্যবহার করার ক্ষেত্রেআমাকে আরজিবিএ + এরও দরকার ছিল hack "।

এই সংস্করণটি স্ট্রিংয়ের মধ্যে অন্তর্ভুক্ত করা হলে '#' অক্ষরটি নিক্ষেপ করতে ত্রুটি যুক্ত করে। সুইফটের জন্য আমার পরিবর্তিত ফর্মটি এখানে।

public enum ColourParsingError: Error
{

    case invalidInput(String)
}
extension UIColor {
    public convenience init(hexString: String) throws
    {
        let hexString = hexString.replacingOccurrences(of: "#", with: "")
        let hex = hexString.trimmingCharacters(in:NSCharacterSet.alphanumerics.inverted)
        var int = UInt32()
        Scanner(string: hex).scanHexInt32(&int)
        let a, r, g, b: UInt32
        switch hex.count 
        {
        case 3: // RGB (12-bit)
            (r, g, b,a) = ((int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17,255)
        //iCSS specification in the form of #F0FA
        case 4: // RGB (24-bit)
            (r, g, b,a) = ((int >> 12) * 17, (int >> 8 & 0xF) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6: // RGB (24-bit)
            (r, g, b, a) = (int >> 16, int >> 8 & 0xFF, int & 0xFF,255)
        case 8: // ARGB (32-bit)
            (r, g, b, a) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            throw ColourParsingError.invalidInput("String is not a valid hex colour string: \(hexString)")
        }
        self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
    }
}

0
extension UIColor {
    public convenience init?(hex: String) {
        let r, g, b, a: CGFloat

        if hex.hasPrefix("#") {
            let start = hex.index(hex.startIndex, offsetBy: 1)
            let hexColor = String(hex[start...])

            if hexColor.count == 8 {
                let scanner = Scanner(string: hexColor)
                var hexNumber: UInt64 = 0

                if scanner.scanHexInt64(&hexNumber) {
                    r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
                    g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
                    b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
                    a = CGFloat(hexNumber & 0x000000ff) / 255

                    self.init(red: r, green: g, blue: b, alpha: a)
                    return
                }
            }
        }

        return nil
    }
}

ব্যবহার:

let white = UIColor(hex: "#ffffff")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.