【问题标题】:Drawing backgroundcolor & border Vs Background PNGs绘制背景颜色和边框和背景 PNG
【发布时间】:2015-04-21 18:54:53
【问题描述】:

我希望我的 iPad 应用程序的大多数按钮都使用特定的 RGB 十六进制颜色。

我所做的是: 我在我的项目中实现了UIButton 子类,它模拟了按钮所需的背景颜色、文本颜色和边框 - 然后我在项目中需要UIButton 的任何地方都使用它。

我的 UI/UX 设计师不提供 PNG,而是坚持让我模仿与 Hex 代码相同的颜色网站按钮。我更喜欢背景 PNG。

现在,您可能想知道这个问题与编程的关系是,我正在访问子类中的 .layer.borderWidth.layer.borderColor 属性,该属性最终会在任何地方使用。

那么,这种方法对应用程序有什么好处,而不是使用背景 PNG?

注意 (如果相关):所有按钮的大小相同。

【问题讨论】:

    标签: ios objective-c performance user-interface uibutton


    【解决方案1】:

    您可以自己从颜色中制作 UIImage 并设置 yourButton 图像:

    + (UIImage *)imageFromColor:(UIColor *)color {
        CGRect rect = CGRectMake(0, 0, 1, 1);
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetFillColorWithColor(context, [color CGColor]);
        CGContextFillRect(context, rect);
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
    

    你还需要convert HEX RGB color codes to UIColor

    【讨论】:

    • 感谢您的回答,但是我想知道它会给应用程序造成的开销(在内存方面)。我的意思是,我可以直接使用 RGB 来模仿颜色,或者可以从颜色创建图像。但是,问题是它是否可取?或者应该使用背景 PNG(通过将图像添加到资源文件夹。)
    • 很难说还有什么更好的。我认为如果你没有太多颜色,你应该使用 PNG :)
    • 是的,就是单色而已,我正在找它不好的原因。 :)
    【解决方案2】:

    这可能会对你有所帮助。

    - (unsigned int)intFromHexString:(NSString *)hexStr
    {
    @try {
        unsigned int hexInt = 0;
        NSScanner *scanner = [NSScanner scannerWithString:hexStr];
        [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"#"]];
        [scanner scanHexInt:&hexInt];
        return hexInt;
    }
    @catch (NSException *exception) {
    
    }
    }
    
    
    
    - (UIColor *)getUIColorObjectFromHexString:(NSString *)hexStr alpha:(CGFloat)alpha
    {
    unsigned int hexint = [self intFromHexString:hexStr];
    UIColor *color =
    [UIColor colorWithRed:((CGFloat) ((hexint & 0xFF0000) >> 16))/255
                    green:((CGFloat) ((hexint & 0xFF00) >> 8))/255
                     blue:((CGFloat) (hexint & 0xFF))/255
                    alpha:alpha];
    
    return color;
    }
    

    此功能将为您提供十六进制字符串的颜色,您可以在按钮中设置这些颜色

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2021-08-16
      • 2013-03-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多