【问题标题】:UIColor from hex string representation来自十六进制字符串表示的 UIColor
【发布时间】:2011-08-27 16:15:52
【问题描述】:

从任何 sn-p 获取:

NSString *_s = @"#000000";

到:

[UIColor blackColor];

任何帮助都非常感谢,只是一直在用丑陋的代码来做这件事:(

【问题讨论】:

    标签: iphone cocoa-touch nsstring hex uicolor


    【解决方案1】:

    修改后的版本 - 也采用 Alpha 值

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

    【讨论】:

      【解决方案2】:

      这对我有用:

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

      像这样使用它:

      UIColorFromRGB(0x4c4c4c)
      

      【讨论】:

      • 这对于整数常量来说非常有用,但对于 @dhomes 所询问的字符串(例如来自文件)则没有那么有用。
      • Fulvio,非常感谢!杰克,非常感谢,从字符串到 UIColor,而不是 rgbValue。哦,只有 Fulvio 的代码细节:第 11 行我改为:hexColor = [hexColor substringFromIndex:1]; cString 未初始化,也不是方法签名的一部分
      • @dhomes 啊,是的,我已经通过您的代码修复修复了我的原始答案。很高兴能帮上忙。
      【解决方案3】:

      我在UIColor 上写了一个类别来实现这一点:

      创建一个新的 Objective-C 类别。在您的标题中:

      #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]
      
      @interface UIColor (Hex)
      
      + (UIColor*)colorFromHex:(NSString*)hex;
      
      @end
      

      在你的实现中:

      @implementation UIColor (Hex)
      
      + (UIColor*)colorFromHex:(NSString *)hex
      {
          unsigned result = 0;
          NSScanner *scanner = [NSScanner scannerWithString:hex];
      
          [scanner setScanLocation:0];
          [scanner scanHexInt:&result];
      
          return UIColorFromRGB(result);
      }
      
      @end
      

      假设您的十六进制字符串格式为 000000,但您可以根据需要进行调整以考虑 #(将 [scanner setScanLocation:0] 更改为 [scanner setScanLocation:1])。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 2013-07-26
        • 1970-01-01
        • 2011-12-06
        相关资源
        最近更新 更多