【问题标题】:UIButton – what is the default image highlight colorUIButton – 默认的图像高亮颜色是什么
【发布时间】:2015-08-01 15:28:05
【问题描述】:

有什么方法可以从某种颜色(假设它是 [UIColor redColor])创建此颜色的默认突出阴影(在这种情况下为某种深红色)。

在我的例子中,我有一个 UIButton(在 UIBarButton 内部),我想将 UIControlStateHighlighted 状态的 titleColor 设置为与 UIImage 的默认突出显示颜色相同。请看下面的代码:

UIColor *color = [UIColor redColor];
UIColor *highlightedColor = ???;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

[button setImage:[[UIImage imageNamed:@"back-arrow"] imageWithOverlayColor:color] forState:UIControlStateNormal];
[button setImage:[[UIImage imageNamed:@"back-arrow"] imageWithOverlayColor:highlightedColor] forState:UIControlStateHighlighted];

[button setTitle:title forState:UIControlStateNormal];
[button setTitleColor:color forState:UIControlStateNormal];
[button setTitleColor:highlightedColor forState:UIControlStateHighlighted];

button.imageEdgeInsets = UIEdgeInsetsMake(0.f, -5.f, 0.f, 0.f);

如果我没有为 UIControlStateHighlighted 状态设置图像/标题,则按下按钮时仅突出显示图像:

【问题讨论】:

    标签: ios objective-c iphone swift uibutton


    【解决方案1】:

    你需要将两种UIColor合并在一起, 首先,你可以得到tintColor使用:

    UIColor *defaultTintColor = self.navigationController.navigationItem.backBarButtonItem.tintColor;
    

    redColordefaultTintColor 合并在一起。 那是我的方法,不优雅,但它有效:

    UIColor* blend( UIColor* c1, UIColor* c2, float alpha )
    {
        alpha = MIN( 1.f, MAX( 0.f, alpha ) );
        float beta = 1.f - alpha;
        CGFloat r1, g1, b1, a1, r2, g2, b2, a2;
        [c1 getRed:&r1 green:&g1 blue:&b1 alpha:&a1];
        [c2 getRed:&r2 green:&g2 blue:&b2 alpha:&a2];
        CGFloat r = r1 * beta + r2 * alpha;
        CGFloat g = g1 * beta + g2 * alpha;
        CGFloat b = b1 * beta + b2 * alpha;
        return [UIColor colorWithRed:r green:g blue:b alpha:1.f];
    }
    

    更优雅:

    UIColor+Extensions.h:

    @interface UIColor (Extensions)
    
    - (UIColor*)blendWithColor:(UIColor*)color2 alpha:(CGFloat)alpha2;
    
    @end
    

    UIColor+Extensions.m:

    @implementation UIColor (Extensions)
    
    - (UIColor*)blendWithColor:(UIColor*)color2 alpha:(CGFloat)alpha2
    {
        alpha2 = MIN( 1.0, MAX( 0.0, alpha2 ) );
        CGFloat beta = 1.0 - alpha2;
        CGFloat r1, g1, b1, a1, r2, g2, b2, a2;
        [self getRed:&r1 green:&g1 blue:&b1 alpha:&a1];
        [color2 getRed:&r2 green:&g2 blue:&b2 alpha:&a2];
        CGFloat red     = r1 * beta + r2 * alpha2;
        CGFloat green   = g1 * beta + g2 * alpha2;
        CGFloat blue    = b1 * beta + b2 * alpha2;
        CGFloat alpha   = a1 * beta + a2 * alpha2;
        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
    }
    
    @end
    

    那么你就可以得到highlightedColor:

    UIColor *color = [UIColor redColor];
    UIColor *defaultTintColor = self.navigationController.navigationItem.backBarButtonItem.tintColor;
    UIColor *highlightedColor = [defaultTintColor blendWithColor:color alpha:0.75];
    

    【讨论】:

      【解决方案2】:

      只需为按钮添加一个突出显示的图像

      @implementation UIButton (YASAddition)
      
      - (void)awakeFromNib {
          [super awakeFromNib];
      
          UIImage *highlightedImage = [UIImage imageWithColor:[[UIColor colorWithHex:0X1E1E1E] colorWithAlphaComponent:0.2f]];
          [self setBackgroundImage:highlightedImage forState:UIControlStateHighlighted];
      }
      
      @end
      

      UIBarButtonItem 也一样

      alpha 是重点

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2011-12-24
      • 1970-01-01
      • 2013-03-26
      • 2012-04-29
      • 2011-09-22
      • 2011-06-07
      相关资源
      最近更新 更多