আমি কীভাবে একটি হেক্স স্ট্রিং থেকে একটি ইউআইসি কলর তৈরি করতে পারি?


543

আমি কীভাবে UIColorএকটি হেক্সাডেসিমাল স্ট্রিং ফর্ম্যাট থেকে একটি তৈরি করতে পারি #00FF00?


আইরিচ এবং ওএসএক্সের জন্য এরিকাতে একটি দুর্দান্ত রঙের এক্সটেনশন বিভাগও রয়েছে
এচিলন

এখানে অন্য গ্রন্থাগারটি রয়েছে: github.com/burhanuddin353/TFTColor
বুরহানউদ্দিন সুনেলওয়ালা

উত্তর:


722

এটি করার সহজ উপায়টি আমি ম্যাক্রোর সাথে খুঁজে পেয়েছি। এটি কেবল আপনার শিরোনামে অন্তর্ভুক্ত করুন এবং এটি আপনার পুরো প্রকল্পে উপলব্ধ।

#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]

হেক্স মান সহ ইউিকোলার ম্যাক্রো

এছাড়াও এই কোডটির রূপান্তরিত সংস্করণ:

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

ব্যবহার:

label.textColor = UIColorFromRGB(0xBC1128);

130
এটি দুর্দান্ত এটি ব্যতীত যদি প্রশ্নকারী জিজ্ঞাসা করে না, যা হেক্স STRING কে ইউআইকোলরে রূপান্তরিত করে। এটি একটি পূর্ণসংখ্যাটিকে একটি ইউআইকলোরতে রূপান্তর করে।
darrinm

31
@ মোহামেদা.কারিম এটি হেক্স ফরম্যাটের পূর্ণসংখ্যার (0x ...) থেকে কোনও ইউআইসিএলরের ফিরে আসার উদাহরণ যা হেক্স বিন্যাসের স্ট্রিং নয় ("# ...")। আপনি যদি যা চান তা দুর্দান্ত তবে প্রশ্নকর্তা যা চেয়েছিলেন তা নয়।
দারিন্ম

3
@ স্কটকোহেল্ট আপনার কোডের রেখাটি একটি হেক্স ফর্ম্যাট স্ট্রিংকে ("#" দিয়ে উপসীর্ণ করা) অন্য হেক্স বিন্যাসের স্ট্রিংয়ে রূপান্তর করে ("0x" দিয়ে উপসর্গযুক্ত)। এটি পূর্ণসংখ্যা উত্পাদন করে না।
দারিন্ম

1
এটি কীভাবে [ইউআইকলার হোয়াইট কালার] ব্যবহার করবেন? সিজি কলার?
স্লিপনট

3
এই ম্যাক্রোর সাথে ব্যবহারের জন্য একটি হেক্স ফর্ম্যাট স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করতে, stackoverflow.com/questions/3648411/… দেখুন
ডিভাইস 1

371

একটি সংক্ষিপ্ত সমাধান:

// Assumes input like "#00FF00" (#RRGGBB).
+ (UIColor *)colorFromHexString:(NSString *)hexString {
    unsigned rgbValue = 0;
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    [scanner setScanLocation:1]; // bypass '#' character
    [scanner scanHexInt:&rgbValue];
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0];
}

1
এবং বিপরীত রূপান্তর করার জন্য একটি ভাল পদ্ধতি (যেমন আপনি যদি মূল ডেটা / একটি দূরবর্তী ডাটাবেসে রঙ সঞ্চয় করে থাকেন) এখানে পাওয়া যাবে - stackoverflow.com/questions/11884227/…
এরিক গোল্ডবার্গ

1
একটি নিখুঁত সমাধান। যদি আপনার হেক্স স্ট্রিংটি একটি (খুব খারাপভাবে নথিভুক্ত) এপিআই থেকে আসে তবে শর্টহ্যান্ড হেক্স কোডগুলি # এফএফএফ বা # এফসি0 এর মত পরীক্ষা করে নিশ্চিত হন। আপনার এগুলিকে # এফএফএফএফএফএফ / # এফএফসিওওতে পরিবর্তন করতে হবে।
প্যাট্রিক

10
Theচ্ছিক করতে আপনি লাইনটির if ( [hexString rangeOfString:@"#"].location == 0 )আগে যোগ করতেও পারেন । setScanLocation#
ডিভাইস 1

আপনি দয়া করে বিপরীত পদ্ধতি যোগ করতে পারেন?
হাসান

11
অলসতার জন্য: সুইট সংস্করণটি এখানে
fabian789

188

আমি একটি সমাধান পেয়েছি যা অ্যান্ড্রয়েড দ্বারা ব্যবহৃত হেক্স ফর্ম্যাট স্ট্রিংগুলির সাথে 100% সামঞ্জস্যপূর্ণ যা ক্রস প্ল্যাটফর্ম মোবাইল ডেভেলপমেন্ট করার সময় আমি খুব সহায়ক বলে মনে করি। এটি আমাকে উভয় প্ল্যাটফর্মের জন্য একটি রঙের তালু ব্যবহার করতে দেয়। অ্যাট্রিবিউশন ব্যতীত পুনরায় ব্যবহার করতে বা আপনি চাইলে অ্যাপাচি লাইসেন্সের অধীনে নির্দ্বিধায় যোগাযোগ করুন।

#import "UIColor+HexString.h"

@interface UIColor(HexString)

+ (UIColor *) colorWithHexString: (NSString *) hexString;
+ (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length;

@end


@implementation UIColor(HexString)

+ (UIColor *) colorWithHexString: (NSString *) hexString {
    NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
    CGFloat alpha, red, blue, green;
    switch ([colorString length]) {
        case 3: // #RGB
            alpha = 1.0f;
            red   = [self colorComponentFrom: colorString start: 0 length: 1];
            green = [self colorComponentFrom: colorString start: 1 length: 1];
            blue  = [self colorComponentFrom: colorString start: 2 length: 1];
            break;
        case 4: // #ARGB
            alpha = [self colorComponentFrom: colorString start: 0 length: 1];
            red   = [self colorComponentFrom: colorString start: 1 length: 1];
            green = [self colorComponentFrom: colorString start: 2 length: 1];
            blue  = [self colorComponentFrom: colorString start: 3 length: 1];          
            break;
        case 6: // #RRGGBB
            alpha = 1.0f;
            red   = [self colorComponentFrom: colorString start: 0 length: 2];
            green = [self colorComponentFrom: colorString start: 2 length: 2];
            blue  = [self colorComponentFrom: colorString start: 4 length: 2];                      
            break;
        case 8: // #AARRGGBB
            alpha = [self colorComponentFrom: colorString start: 0 length: 2];
            red   = [self colorComponentFrom: colorString start: 2 length: 2];
            green = [self colorComponentFrom: colorString start: 4 length: 2];
            blue  = [self colorComponentFrom: colorString start: 6 length: 2];                      
            break;
        default:
            [NSException raise:@"Invalid color value" format: @"Color value %@ is invalid.  It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexString];
            break;
    }
    return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
}

+ (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length {
    NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
    NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
    unsigned hexComponent;
    [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
    return hexComponent / 255.0;
}

@end 

3
ইন colorComponentFrom:start:length:, আপনার থাকা উচিত নয় return hexComponent / 0xFF; // divide by 255, not 256? আপনার ফিরে পাওয়া উচিত সবচেয়ে বড় হেক্স মান 0xFF, এভাবে আপনাকে 0xFF (255) দ্বারা ভাগ করা উচিত।
স্যাম

ভাল ধরা স্যাম। পরিবর্তনটি প্রতিবিম্বিত করতে সম্পাদিত।
মিকাহ হাইনলাইন

6
এটি দুর্দান্ত, চিয়ার্স। এছাড়াও, ইউআইকিওলারের কোনও বিভাগের পরিবর্তে আপনি [@"#538aa4" toColor]
এনএসএসআর্টিংয়ের উপর একটির

2
এই সমাধানটি দুর্দান্ত, আমি কোনও সংকলক সতর্কতা এড়াতে ব্যক্তিগত ইন্টারফেসের নামের জন্য "ব্যক্তিগত" যুক্ত করার পরামর্শ দেব would @ ইনটারফেস ইউআইকোলার (প্রাইভেট)
জ্লিপ করুন

1
খুশী হলাম। আপনার অন্য ফাংশনটি ইন্টারফেসে রাখা উচিত , যদিও।
বজর্ন রোচে

63

UIColorহেক্স স্ট্রিং থেকে একটি উত্তোলনের ওপির প্রশ্নটি কীভাবে মোকাবেলা করতে পারে তার একটি সুন্দর পোস্ট । নীচে উপস্থাপিত সমাধানটি অন্যদের থেকে আলাদা কারণ এটি স্ট্রিং মানগুলিকে সমর্থন করে যা '0x' বা '#' হেক্স স্ট্রিং উপস্থাপনায় উপস্থাপিত থাকতে পারে ... (ব্যবহার দেখুন)

এখানে মূল বিট ...

- (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha
{
  // Convert hex string to an integer
  unsigned int hexint = [self intFromHexString:hexStr];

  // Create a color object, specifying alpha as well
  UIColor *color =
    [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255
    green:((CGFloat) ((hexint & 0xFF00) >> 8))/255
    blue:((CGFloat) (hexint & 0xFF))/255
    alpha:alpha];

  return color;
}

সহায়ক পদ্ধতি ...

- (unsigned int)intFromHexString:(NSString *)hexStr
{
  unsigned int hexInt = 0;

  // Create scanner
  NSScanner *scanner = [NSScanner scannerWithString:hexStr];

  // Tell scanner to skip the # character
  [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]];

  // Scan hex value
  [scanner scanHexInt:&hexInt];

  return hexInt;
}

ব্যবহার:

NSString *hexStr1 = @"123ABC";
NSString *hexStr2 = @"#123ABC";
NSString *hexStr3 = @"0x123ABC";

UIColor *color1 = [self getUIColorObjectFromHexString:hexStr1 alpha:.9];
NSLog(@"UIColor: %@", color1);

UIColor *color2 = [self getUIColorObjectFromHexString:hexStr2 alpha:.9];
NSLog(@"UIColor: %@", color2);

UIColor *color3 = [self getUIColorObjectFromHexString:hexStr3 alpha:.9];
NSLog(@"UIColor: %@", color3);

সম্পূর্ণ রেফারেন্স নিবন্ধ

সুইফট 2+

আমি এই সমাধানটি সুইফট ২.২ এ পোর্ট করেছি। নোট করুন যে আমি alphaপ্যারামিটারটি পরিবর্তন করে 1.0 এ ডিফল্ট সেট ব্যবহার করেছি । আমি সুইট ২.২- UInt32NSScannerশ্রেণীর দ্বারা প্রয়োজনীয় প্রকারের প্রকারটিও আপডেট করেছি ।

func colorWithHexString(hexString: String, alpha:CGFloat = 1.0) -> UIColor {

    // Convert hex string to an integer
    let hexint = Int(self.intFromHexString(hexString))
    let red = CGFloat((hexint & 0xff0000) >> 16) / 255.0
    let green = CGFloat((hexint & 0xff00) >> 8) / 255.0
    let blue = CGFloat((hexint & 0xff) >> 0) / 255.0 

    // Create color object, specifying alpha as well
    let color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
    return color
}

func intFromHexString(hexStr: String) -> UInt32 {
    var hexInt: UInt32 = 0
    // Create scanner
    let scanner: NSScanner = NSScanner(string: hexStr)
    // Tell scanner to skip the # character
    scanner.charactersToBeSkipped = NSCharacterSet(charactersInString: "#")
    // Scan hex value
    scanner.scanHexInt(&hexInt)
    return hexInt
}

সুইফট 4+

সুইফট 4-এ প্রয়োগ হওয়া পরিবর্তনের সাথে একই যুক্তি ব্যবহার করে,

func colorWithHexString(hexString: String, alpha:CGFloat = 1.0) -> UIColor {

    // Convert hex string to an integer
    let hexint = Int(self.intFromHexString(hexStr: hexString))
    let red = CGFloat((hexint & 0xff0000) >> 16) / 255.0
    let green = CGFloat((hexint & 0xff00) >> 8) / 255.0
    let blue = CGFloat((hexint & 0xff) >> 0) / 255.0

    // Create color object, specifying alpha as well
    let color = UIColor(red: red, green: green, blue: blue, alpha: alpha)
    return color
}

func intFromHexString(hexStr: String) -> UInt32 {
    var hexInt: UInt32 = 0
    // Create scanner
    let scanner: Scanner = Scanner(string: hexStr)
    // Tell scanner to skip the # character
    scanner.charactersToBeSkipped = CharacterSet(charactersIn: "#")
    // Scan hex value
    scanner.scanHexInt32(&hexInt)
    return hexInt
}

রঙের হেক্সাস রেফারেন্স

এইচটিএমএল রঙের নাম এবং কোডগুলি

রঙের হেক্স রঙের কোডগুলি


এখানে পোস্ট করা সুইফট স্নিপেটগুলি সুইফটে বিকল্পগুলির উদ্দেশ্যকে ভুল বোঝে বলে মনে হচ্ছে, যা এমন মান রয়েছে যা কখনও অস্তিত্ব থাকতে পারে contain প্যারামিটারটি একটি alচ্ছিক হওয়া প্রয়োজন কিনা তা জিজ্ঞাসা করার প্রশ্নটি হল কারও কাছে এটি নির্ধারণ করার ক্ষমতা প্রয়োজন কিনা। এটি সম্ভবত জন্য জানার alphaজন্য কি শূন্য সেট করা? কারণ এই পদ্ধতিটি লোকেদের সেই ক্ষমতা দেয় এবং যদি কারও alphaশূন্য করার সিদ্ধান্ত নেওয়া উচিত , তবে thatচ্ছিকভাবে বাধ্যতামূলকভাবে আনারপ্যাটিং ক্রমাগত ক্রাশের দিকে পরিচালিত করবে। আমি এটি সম্পাদনা করি নি, যদিও এর ক্ষেত্রে এমন কিছু ন্যায্যতা রয়েছে যা সম্পর্কে আমি অবগত নই।
জোনাথন থর্নটন

@ জোনাথন টর্ন্টন - মাথা উঁচু করার জন্য ধন্যবাদ। সমাধান।
টমমি সি

কোনও উত্তরাধিকারী প্রকল্পে কাজ করা এবং উদ্দেশ্য-সি সমাধান খুব ভালভাবে কাজ করে ... ব্যতীত ... অদ্ভুতভাবে ... @ "# # ffc107" এবং @ "# e040fb" সহযোগিতা করতে অস্বীকার করুন! থটস?
নাথানিয়েল

51

এটি এমন একটি ফাংশন যা একটি হেক্স স্ট্রিং নেয় এবং একটি ইউআইসিওলর প্রদান করে।
(আপনি দুটি ফর্ম্যাট সহ হেক্স স্ট্রিং প্রবেশ করতে পারেন: #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


আমি এসভিজিতে দেখেছি, যেখানে # F0F এর মতো 3 টি অক্ষর সহ হেক্স স্ট্রিংয়ের একটি ছোট সংস্করণ রয়েছে।
গ্লেন হাউস 12

এটি শর্টহ্যান্ড স্বরলিপি, যেখানে '# F0F' '# FF00FF' এর সমতুল্য। শর্টহ্যান্ড পরীক্ষা করে এটি প্রসারিত করে এমন কোনও ফাংশন লিখতে সহজ হবে write
ইথান স্ট্রাইডার

38

এই বিভাগটি ব্যবহার করুন:

ইউআইকিওলর + হেক্সাডেসিমাল.এইচ ফাইলটিতে

#import <UIKit/UIKit.h>

@interface UIColor(Hexadecimal)

+ (UIColor *)colorWithHexString:(NSString *)hexString;

@end

UIColor + Hexadecimal.m ফাইলটিতে

#import "UIColor+Hexadecimal.h"

@implementation UIColor(Hexadecimal)

+ (UIColor *)colorWithHexString:(NSString *)hexString {
    unsigned rgbValue = 0;
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    [scanner setScanLocation:1]; // bypass '#' character
    [scanner scanHexInt:&rgbValue];

    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0];
}

@end

ক্লাসে আপনি এটি ব্যবহার করতে চান:

#import "UIColor+Hexadecimal.h"

এবং:

[UIColor colorWithHexString:@"#6e4b4b"];

কোনও আলফা হ্যান্ডলিং নেই
ইহোর ক্লিমভ

28

এক্সটেনশন ব্যবহার করে একটি দুর্দান্ত সুইফট বাস্তবায়ন (এক্সকোড 7 এর জন্য আপডেট হওয়া), বিভিন্ন উত্তর এবং স্থান থেকে এক সাথে টানা। আপনার শেষে স্ট্রিং এক্সটেনশনগুলিও লাগবে।

ব্যবহার করুন:

let hexColor = UIColor(hex: "#00FF00")

দ্রষ্টব্য: আমি একটি আলফা চ্যানেলের স্ট্যান্ডার্ড 6 ডিজিটের হেক্স মান শেষে 2 অতিরিক্ত সংখ্যার জন্য একটি বিকল্প যুক্ত করেছি ( 00- এর মান পাস করুন 99)। এটি যদি আপনার ক্ষতি করে, কেবল এটি সরিয়ে দিন। আপনি এটি একটি alচ্ছিক আলফা প্যারামিটারে পাস করার জন্য প্রয়োগ করতে পারেন।

এক্সটেনশান:

extension UIColor {

    convenience init(var hex: String) {
        var alpha: Float = 100
        let hexLength = hex.characters.count
        if !(hexLength == 7 || hexLength == 9) {
            // A hex must be either 7 or 9 characters (#RRGGBBAA)
            print("improper call to 'colorFromHex', hex length must be 7 or 9 chars (#GGRRBBAA)")
            self.init(white: 0, alpha: 1)
            return
        }

        if hexLength == 9 {
            // Note: this uses String subscripts as given below
            alpha = hex[7...8].floatValue
            hex = hex[0...6]
        }

        // Establishing the rgb color
        var rgb: UInt32 = 0
        let s: NSScanner = NSScanner(string: hex)
        // Setting the scan location to ignore the leading `#`
        s.scanLocation = 1
        // Scanning the int into the rgb colors
        s.scanHexInt(&rgb)

        // Creating the UIColor from hex int
        self.init(
            red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgb & 0x0000FF) / 255.0,
            alpha: CGFloat(alpha / 100)
        )
    }
}

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

extension String {

    /**
    Returns the float value of a string
    */
    var floatValue: Float {
        return (self as NSString).floatValue
    }

    /**
    Subscript to allow for quick String substrings ["Hello"][0...1] = "He"
    */
    subscript (r: Range<Int>) -> String {
        get {
            let start = self.startIndex.advancedBy(r.startIndex)
            let end = self.startIndex.advancedBy(r.endIndex - 1)
            return self.substringWithRange(start..<end)
        }
    }
}

আপনি কি স্ট্রিং এক্সটেনশনটি এর সাবস্ক্রিপ্ট পেতে ব্যবহার করছেন? যেমন stackoverflow.com/a/24144365/3220708
ক্রেগ Grummitt

পুনঃটুইট হাহা, হ্যাঁ আমার কাছে এক্সটেনশন এবং সাবস্ক্রিপ্টগুলির একটি শালীন সংকলিত তালিকা রয়েছে যা আমি মাঝে মাঝে (দু: খ) ভুলে যাই যা মান ভাষা বৈশিষ্ট্য সেটে অন্তর্ভুক্ত নয়। আপনার উত্সটি দিয়ে আমার উত্তর আপডেট করেছি। আমি সেখান থেকে এটি পেয়েছি কিনা তা নিশ্চিত নয় তবে এটি নিশ্চিত যে এটি নিকটে দেখায়।
ফিরো

আপনি উল্লেখ করতে চাইতে পারেন এটি একটি স্ট্রিং এক্সটেনশন। : এছাড়াও আপনি মিস করেছেন স্ট্রিং floatValue এক্সটেনশন বলে মনে হচ্ছে stackoverflow.com/a/24088249/3220708 অন্য যে, ভালো কাজ!
ক্রেগ গ্রুমিট

কাউন্টএলমেন্টস () ফানক কোথায়?
Г И І И

countElements()count()সুইফট ১.২ এ প্রতিস্থাপন করা হয়েছিল , এটি ভাষায় নির্মিত। আমি আমার উত্তর আপডেট করেছি।
ফিরো

27

আপনি এটির মতো একটি এক্সটেনশন করতে পারেন

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

এবং এটি এর মতো যে কোনও জায়গায় ব্যবহার করুন

UIColor(rgb: 0xffffff, alphaVal: 0.2)

মৃত সহজ, অবশ্যই আমার প্রিয়।
তত্ত্ব

ধন্যবাদ, এটি দুর্দান্ত, তাই পাঠ্যের অন্যান্য দেয়ালের তুলনায় সংক্ষিপ্ত!
ফ্র্যাঙ্কবাইট.কম

সুন্দর ফাংশন তবে এটি কোনওভাবেই প্রশ্নের উত্তর দেয় না।
mah

@ মম এটিই আমার মনে প্রশ্ন, হেক্সস্ট্রিং থেকে কীভাবে ইউআইসিওলর তৈরি করা যায়
মানু গুপ্ত ২

@ মনুগুপ্ত আপনি এই উত্তরে কোনও স্ট্রিং পরিচালনা করার সম্পূর্ণ অভাব লক্ষ্য করতে পারেন। একটি হেক্স নম্বর হেক্স স্ট্রিং নয়। প্রশ্নটি স্পষ্টভাবে একটি স্ট্রিংকে জানিয়েছে এবং যদিও এর কোনও উদ্ধৃতি নেই, #00FF00স্পষ্টতই এটি একটি চরিত্রের স্ট্রিং হওয়ার উদ্দেশ্যে। অন্যরা যেমন বলেছে এটি সহজ, সংক্ষিপ্ত। তবে যদি এটি স্ট্রিংয়ের সাথে ডিল না করে তবে স্ট্রিংগুলি কীভাবে মোকাবেলা করতে হবে এমন প্রশ্নের উত্তর দিতে পারে না।
মাহ

26

হেক্সাডেসিমাল স্ট্রিং থেকে এমন একটি UIColor(বা CGColor) তে কোনও বিল্টিন রূপান্তর নেই যা আমি অবগত। যাইহোক, আপনি সহজেই এই উদ্দেশ্যে কয়েকটি ফাংশন লিখতে পারেন - উদাহরণস্বরূপ, আইফোনের বিকাশটি ইউনিকলারের উপাদানগুলিতে অ্যাক্সেস করুন দেখুন


3
+1 যদি আপনি নীচে স্ক্রোল করে থাকেন তবে প্রশ্নে থাকা পদ্ধতিটি হ'ল + colorWithHexString :.
রব নেপিয়ার

1
@ রবনেপিয়ার +colorWithHexString:কাজ করে না। আমার ক্ষেত্রে অন্তত। :)
वन

15

আমি এটিরUIColor জন্য একটি ভাল বিভাগটি পেয়েছি , ইউআইকিওলর + পিএক্সএক্সটেনশন

ব্যবহার: UIColor *mycolor = [UIColor pxColorWithHexValue:@"#BADA55"];

এবং, কেবলমাত্র আমার গিস্টটির লিঙ্কটি ব্যর্থ হলে, আসল বাস্তবায়ন কোডটি এখানে:

//
//  UIColor+PXExtensions.m
//

#import "UIColor+UIColor_PXExtensions.h"

@implementation UIColor (UIColor_PXExtensions)

+ (UIColor*)pxColorWithHexValue:(NSString*)hexValue
{
    //Default
    UIColor *defaultResult = [UIColor blackColor];

    //Strip prefixed # hash
    if ([hexValue hasPrefix:@"#"] && [hexValue length] > 1) {
        hexValue = [hexValue substringFromIndex:1];
    }

    //Determine if 3 or 6 digits
    NSUInteger componentLength = 0;
    if ([hexValue length] == 3)
    {
        componentLength = 1;
    }
    else if ([hexValue length] == 6)
    {
        componentLength = 2;
    }
    else
    {
        return defaultResult;
    }

    BOOL isValid = YES;
    CGFloat components[3];

    //Seperate the R,G,B values
    for (NSUInteger i = 0; i < 3; i++) {
        NSString *component = [hexValue substringWithRange:NSMakeRange(componentLength * i, componentLength)];
        if (componentLength == 1) {
            component = [component stringByAppendingString:component];
        }
        NSScanner *scanner = [NSScanner scannerWithString:component];
        unsigned int value;
        isValid &= [scanner scanHexInt:&value];
        components[i] = (CGFloat)value / 256.0f;
    }

    if (!isValid) {
        return defaultResult;
    }

    return [UIColor colorWithRed:components[0]
                           green:components[1]
                            blue:components[2]
                           alpha:1.0];
}

@end

@ পিটারডুনিহো ঠিক আছে, আমি বাস্তবায়ন কোডটি যুক্ত করেছি :)
হ্লুং

13

দ্রুত সংস্করণ। ফাংশন বা এক্সটেনশন হিসাবে ব্যবহার করুন।

ক্রিয়া
  func UIColorFromRGB(colorCode: String, alpha: Float = 1.0) -> UIColor{
    var scanner = NSScanner(string:colorCode)
    var color:UInt32 = 0;
    scanner.scanHexInt(&color)

    let mask = 0x000000FF
    let r = CGFloat(Float(Int(color >> 16) & mask)/255.0)
    let g = CGFloat(Float(Int(color >> 8) & mask)/255.0)
    let b = CGFloat(Float(Int(color) & mask)/255.0)

    return UIColor(red: r, green: g, blue: b, alpha: CGFloat(alpha))
}
প্রসার
extension UIColor {
    convenience init(colorCode: String, alpha: Float = 1.0){
        var scanner = NSScanner(string:colorCode)
        var color:UInt32 = 0;
        scanner.scanHexInt(&color)

        let mask = 0x000000FF
        let r = CGFloat(Float(Int(color >> 16) & mask)/255.0)
        let g = CGFloat(Float(Int(color >> 8) & mask)/255.0)
        let b = CGFloat(Float(Int(color) & mask)/255.0)

        self.init(red: r, green: g, blue: b, alpha: CGFloat(alpha))
    }
}
কিভাবে ফোন করবেন
let hexColorFromFunction = UIColorFromRGB("F4C124", alpha: 1.0)
let hexColorFromExtension = UIColor(colorCode: "F4C124", alpha: 1.0)
আপনি Hex Colorইন্টারফেস বিল্ডার থেকে আপনার সংজ্ঞা দিতে পারেন ।

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


12

এটি অন্য বিকল্প।

- (UIColor *)colorWithRGBHex:(UInt32)hex
{
    int r = (hex >> 16) & 0xFF;
    int g = (hex >> 8) & 0xFF;
    int b = (hex) & 0xFF;

    return [UIColor colorWithRed:r / 255.0f
                           green:g / 255.0f
                            blue:b / 255.0f
                           alpha:1.0f];
}

বিকল্প প্রশ্নের বিকল্প উত্তর ... যদিও এই পৃষ্ঠায় প্রশ্নের যৌক্তিক উত্তর নয় not
mah

11

আপনি এইচএক্স স্ট্রিংটিকে প্রকৃত ইউআইক্লোরারে রূপান্তর করতে বিভিন্ন অনলাইন সরঞ্জাম ব্যবহার করতে পারেন। Uicolor.org বা ইউআই কালার পিকারটি দেখুন । আউটপুটটি উদ্দেশ্য-সি কোডে রূপান্তরিত হবে, যেমন:

[UIColor colorWithRed:0.93 green:0.80 blue:0.80 alpha:1.0];

যা আপনি আপনার অ্যাপ্লিকেশন এম্বেড করতে পারে। আশাকরি এটা সাহায্য করবে!


আর একটি অনলাইন সরঞ্জাম, একই নাম একইভাবে, ইউআই কালার পিকার
জো

সাধারণত লোকেরা যখন এই জাতীয় সমস্যাটি সমাধানের জন্য কোডের সাহায্যের জন্য জিজ্ঞাসা করে, তখন একটি উত্তর যা "প্রথমে কিছু অনলাইন সাইটে যান ..." বলে যে উত্তরটি প্রশ্নকারী চেয়েছিল তার উত্তর হতে পারে না not
mah

11

সুইফট 4

আপনি convenienceএক্সটেনশনে এটির মতো একটি সুন্দর নির্মাতা তৈরি করতে পারেন :

extension UIColor {
    convenience init(hexString: String, alpha: CGFloat = 1.0) {
        var hexInt: UInt32 = 0
        let scanner = Scanner(string: hexString)
        scanner.charactersToBeSkipped = CharacterSet(charactersIn: "#")
        scanner.scanHexInt32(&hexInt)

        let red = CGFloat((hexInt & 0xff0000) >> 16) / 255.0
        let green = CGFloat((hexInt & 0xff00) >> 8) / 255.0
        let blue = CGFloat((hexInt & 0xff) >> 0) / 255.0
        let alpha = alpha

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

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

let color = UIColor(hexString: "#AABBCCDD")

'স্ক্যানহেক্সট্যান্ট 32' আইওএস 13.0 এ অবহিত ছিল
কসমো অরুণ

10
extension UIColor {
    convenience init(hexaString: String, alpha: CGFloat = 1) {
        let chars = Array(hexaString.dropFirst())
        self.init(red:   .init(strtoul(String(chars[0...1]),nil,16))/255,
                  green: .init(strtoul(String(chars[2...3]),nil,16))/255,
                  blue:  .init(strtoul(String(chars[4...5]),nil,16))/255,
                  alpha: alpha)}
}

ব্যবহার:

let redColor       = UIColor(hexaString: "#FF0000")              // r 1,0 g 0,0 b 0,0 a 1,0
let transparentRed = UIColor(hexaString: "#FF0000", alpha: 0.5)  // r 1,0 g 0,0 b 0,0 a 0,5


4

আলফা সহ আরও একটি সংস্করণ

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

4

স্বচ্ছতার সমর্থনে আরজিবিএ ইন্টার মান প্রাপ্ত হলেও @ টমের উত্তরের সমতুল্য:

func colorWithHex(aHex: UInt) -> UIColor
{
    return UIColor(red: CGFloat((aHex & 0xFF000000) >> 24) / 255,
        green: CGFloat((aHex & 0x00FF0000) >> 16) / 255,
        blue: CGFloat((aHex & 0x0000FF00) >> 8) / 255,
        alpha: CGFloat((aHex & 0x000000FF) >> 0) / 255)
}

//usage
var color = colorWithHex(0x7F00FFFF)

এবং আপনি যদি স্ট্রিং থেকে এটি ব্যবহার করতে সক্ষম হতে চান তবে আপনি স্ট্র্টল ব্যবহার করতে পারেন:

var hexString = "0x7F00FFFF"

let num = strtoul(hexString, nil, 16)

var colorFromString = colorWithHex(num)

4

এখানে Swift 1.2এক্সটেনশন হিসাবে লিখিত একটি সংস্করণ UIColor। এটি আপনাকে করতে দেয়

let redColor = UIColor(hex: "#FF0000")

যা আমি অনুভব করি এটি করার সবচেয়ে প্রাকৃতিক উপায়।

extension UIColor {
  // Initialiser for strings of format '#_RED_GREEN_BLUE_'
  convenience init(hex: String) {
    let redRange    = Range<String.Index>(start: hex.startIndex.advancedBy(1), end: hex.startIndex.advancedBy(3))
    let greenRange  = Range<String.Index>(start: hex.startIndex.advancedBy(3), end: hex.startIndex.advancedBy(5))
    let blueRange   = Range<String.Index>(start: hex.startIndex.advancedBy(5), end: hex.startIndex.advancedBy(7))

    var red     : UInt32 = 0
    var green   : UInt32 = 0
    var blue    : UInt32 = 0

    NSScanner(string: hex.substringWithRange(redRange)).scanHexInt(&red)
    NSScanner(string: hex.substringWithRange(greenRange)).scanHexInt(&green)
    NSScanner(string: hex.substringWithRange(blueRange)).scanHexInt(&blue)

    self.init(
      red: CGFloat(red) / 255,
      green: CGFloat(green) / 255,
      blue: CGFloat(blue) / 255,
      alpha: 1
    )
  }
}

Xcode 6.3.2 এ শুরু হওয়া লাইনে let greenRange = ...আমি একটি ব্যতিক্রম পাই:fatal error: can not increment endIndex
ক্লিফটন ল্যাব্রাম

@ ক্লিফটনল্যাব্রাম আমি এটি এক্সকোড 7 বিটা 3 তে পরীক্ষা করেছি এবং এটি একইরকম কাজ করে। আপনি এখনও এই সমস্যা হচ্ছে?
মরগান উইল্ড

3

আর একটি বাস্তবায়ন আলফার মতো "FFF"বা "FFFFFF"ব্যবহারের জন্য স্ট্রিংগুলিকে মঞ্জুরি দেয়:

+ (UIColor *) colorFromHexString:(NSString *)hexString alpha: (CGFloat)alpha{
    NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
    if([cleanString length] == 3) {
        cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@",
                       [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)],
                       [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)],
                       [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]];
    }
    if([cleanString length] == 6) {
        cleanString = [cleanString stringByAppendingString:@"ff"];
    }

    unsigned int baseValue;
    [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue];

    float red = ((baseValue >> 24) & 0xFF)/255.0f;
    float green = ((baseValue >> 16) & 0xFF)/255.0f;
    float blue = ((baseValue >> 8) & 0xFF)/255.0f;

    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}

3

দ্রুত 1.2 জন্য আপডেট হয়েছে

class func colorWithHexString (hex:String) -> UIColor {
    var cString: NSString = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

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

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

    var rString: String = cString.substringToIndex(2)
    var gString: String = (cString.substringFromIndex(2) as NSString).substringToIndex(2)
    var bString: String = (cString.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(Float(r) / 255.0), green: CGFloat(Float(g) / 255.0), blue: CGFloat(Float(b) / 255.0), alpha: CGFloat(1))

}

3

এর জন্য মার্জিত এক্সটেনশন তৈরি করুন UIColor:

extension UIColor {

convenience init(string: String) {

        var uppercasedString = string.uppercased()
        uppercasedString.remove(at: string.startIndex)

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

        let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0
        let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0
        let blue = CGFloat(rgbValue & 0x0000FF) / 255.0

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

লাল রঙ তৈরি করুন:

let red = UIColor(string: "#ff0000") 

3
extension UIColor 
{
    class func fromHexaString(hex:String) -> UIColor
    {
        let scanner           = Scanner(string: hex)
        scanner.scanLocation  = 0
        var rgbValue: UInt64  = 0
        scanner.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)
        )
    }
}

//you can call like this.

UIColor.fromHexaString(hex:3276b1)

2
 You Can Get UIColor From String Code Like
   circularSpinner.fillColor = [self getUIColorObjectFromHexString:@"27b8c8" alpha:9];

 //Function For Hex Color Use
    - (unsigned int)intFromHexString:(NSString *)hexStr
    {
        unsigned int hexInt = 0;

        // Create scanner
        NSScanner *scanner = [NSScanner scannerWithString:hexStr];

        // Tell scanner to skip the # character
        [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]];

        // Scan hex value
        [scanner scanHexInt:&hexInt];

        return hexInt;
    }




    - (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha
    {
        // Convert hex string to an integer
        unsigned int hexint = [self intFromHexString:hexStr];

        // Create color object, specifying alpha as well
        UIColor *color =
        [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255
                        green:((CGFloat) ((hexint & 0xFF00) >> 8))/255
                         blue:((CGFloat) (hexint & 0xFF))/255
                        alpha:alpha];

        return color;
    }

    /Function For Hex Color Use
    - (unsigned int)intFromHexString:(NSString *)hexStr
    {
        unsigned int hexInt = 0;

        // Create scanner
        NSScanner *scanner = [NSScanner scannerWithString:hexStr];

        // Tell scanner to skip the # character
        [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]];

        // Scan hex value
        [scanner scanHexInt:&hexInt];

        return hexInt;
    }




    - (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha
    {
        // Convert hex string to an integer
        unsigned int hexint = [self intFromHexString:hexStr];

        // Create color object, specifying alpha as well
        UIColor *color =
        [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255
                        green:((CGFloat) ((hexint & 0xFF00) >> 8))/255
                         blue:((CGFloat) (hexint & 0xFF))/255
                        alpha:alpha];

        return color;
    }

আপনি যদি এই কোডটি ব্যবহার করতে চান, তবে আপনি [স্ব getUIColorObjectFromHexString: @ "27b8c8" আলফা: 9] কল করুন; কেবল ....
মনীশ সায়নী

2

আমি রঙের পাশাপাশি আলফা নিশ্চিত করতে চাই, তাই আমি আমার নিজের বিভাগটি লিখি

+ (UIColor *) colorWithHex:(int)color {

    float red = (color & 0xff000000) >> 24;
    float green = (color & 0x00ff0000) >> 16;
    float blue = (color & 0x0000ff00) >> 8;
    float alpha = (color & 0x000000ff);

    return [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha/255.0];
}

এই মত ব্যবহার করা সহজ

[UIColor colorWithHex:0xFF0000FF]; //Red
[UIColor colorWithHex:0x00FF00FF]; //Green
[UIColor colorWithHex:0x00FF00FF]; //Blue
[UIColor colorWithHex:0x0000007F]; //transparent black

2

আমি তার জন্য একটি সুবিধামত উদ্যোগ তৈরি করেছি:

extension UIColor {
convenience init(hex: String, alpha: CGFloat)
{
    let redH = CGFloat(strtoul(hex.substringToIndex(advance(hex.startIndex,2)), nil, 16))
    let greenH = CGFloat(strtoul(hex.substringWithRange(Range<String.Index>(start: advance(hex.startIndex, 2), end: advance(hex.startIndex, 4))), nil, 16))
    let blueH = CGFloat(strtoul(hex.substringFromIndex(advance(hex.startIndex,4)), nil, 16))

    self.init(red: redH/255, green: greenH/255, blue: blueH/255, alpha: alpha)
}
}

তারপরে আপনি আপনার প্রকল্পের যে কোনও জায়গায় ইউআইকলার তৈরি করতে পারবেন ঠিক যেমন:

UIColor(hex: "ffe3c8", alpha: 1)

আশাকরি এটা সাহায্য করবে...


2

আপনি ইউআইকলারের এক্সটেনশন ক্লাসটি তৈরি করতে পারেন: -

প্রসারণ UIColor {

// মার্ক: - getColorFromHex / ** এই ফাংশনটি রঙের হেক্স কোডকে আরজিবিতে রূপান্তর করবে।

- parameter color  hex string.

- returns: RGB color code.
*/
class func getColorFromHex(hexString:String)->UIColor{

    var rgbValue : UInt32 = 0
    let scanner:NSScanner =  NSScanner(string: hexString)

    scanner.scanLocation = 1
    scanner.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))
}

}


2

দ্রুত 2.0+ এর জন্য। এই কোডটি আমার পক্ষে কাজ করে।

extension UIColor {
    /// UIColor(hexString: "#cc0000")
    internal convenience init?(hexString:String) {
        guard hexString.characters[hexString.startIndex] == Character("#") else {
            return nil
        }
        guard hexString.characters.count == "#000000".characters.count else {
            return nil
        }
        let digits = hexString.substringFromIndex(hexString.startIndex.advancedBy(1))
        guard Int(digits,radix:16) != nil else{
            return nil
        }
        let red = digits.substringToIndex(digits.startIndex.advancedBy(2))
        let green = digits.substringWithRange(Range<String.Index>(start: digits.startIndex.advancedBy(2),
            end: digits.startIndex.advancedBy(4)))
        let blue = digits.substringWithRange(Range<String.Index>(start:digits.startIndex.advancedBy(4),
            end:digits.startIndex.advancedBy(6)))
        let redf = CGFloat(Double(Int(red, radix:16)!) / 255.0)
        let greenf = CGFloat(Double(Int(green, radix:16)!) / 255.0)
        let bluef = CGFloat(Double(Int(blue, radix:16)!) / 255.0)
        self.init(red: redf, green: greenf, blue: bluef, alpha: CGFloat(1.0))
    }
}

এই কোডটিতে স্ট্রিং ফর্ম্যাট চেকিং রয়েছে। যেমন

let aColor = UIColor(hexString: "#dadada")!
let failed = UIColor(hexString: "123zzzz")

এবং যতদূর আমি জানি, আমার কোডটি ব্যর্থ শর্তের অর্থবোধটি বজায় রাখা এবং optionচ্ছিক মান ফেরত দেওয়ার পক্ষে কোনও অসুবিধে নেই। এবং এটি সেরা উত্তর হওয়া উচিত।


2

দ্রবণটির সুইফট ২.০ সংস্করণ যা বর্ণের আলফা মানটি পরিচালনা করবে এবং সঠিক ত্রুটি হ্যান্ডলিং সহ এখানে রয়েছে:

func RGBColor(hexColorStr : String) -> UIColor?{

    var red:CGFloat = 0.0
    var green:CGFloat = 0.0
    var blue:CGFloat = 0.0
    var alpha:CGFloat = 1.0

    if hexColorStr.hasPrefix("#"){

        let index   = hexColorStr.startIndex.advancedBy(1)
        let hex     = hexColorStr.substringFromIndex(index)
        let scanner = NSScanner(string: hex)
        var hexValue: CUnsignedLongLong = 0

        if scanner.scanHexLongLong(&hexValue)
        {
            if hex.characters.count == 6
            {
                red   = CGFloat((hexValue & 0xFF0000) >> 16) / 255.0
                green = CGFloat((hexValue & 0x00FF00) >> 8)  / 255.0
                blue  = CGFloat(hexValue & 0x0000FF) / 255.0
            }
            else if hex.characters.count == 8
            {
                red   = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0
                green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0
                blue  = CGFloat((hexValue & 0x0000FF00) >> 8)  / 255.0
                alpha = CGFloat(hexValue & 0x000000FF)         / 255.0
            }
            else
            {
                print("invalid hex code string, length should be 7 or 9", terminator: "")
                return nil
            }
        }
        else
        {
            print("scan hex error")
       return nil
        }
    }

    let color: UIColor =  UIColor(red:CGFloat(red), green: CGFloat(green), blue:CGFloat(blue), alpha: alpha)
    return color
}

2
    //UIColorWithHexString

    static UIColor * UIColorWithHexString(NSString *hex) {
        unsigned int rgb = 0;
        [[NSScanner scannerWithString:
          [[hex uppercaseString] stringByTrimmingCharactersInSet:
           [[NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEF"] invertedSet]]]
         scanHexInt:&rgb];
        return [UIColor colorWithRed:((CGFloat)((rgb & 0xFF0000) >> 16)) / 255.0
                               green:((CGFloat)((rgb & 0xFF00) >> 8)) / 255.0
                                blue:((CGFloat)(rgb & 0xFF)) / 255.0
                               alpha:1.0];
    }

ব্যবহার

self.view.backgroundColor = UIColorWithHexString(@"#0F35C0");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.