UIButton - 默认的图像高亮颜色是什么?

5

有没有什么方法可以从某种颜色(比如说[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状态设置图像/标题,则仅在按钮被按下时会突出显示图像:

输入图像描述

2个回答

0
你需要将两种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];

0

只需为按钮添加highlightedImage即可

@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是关键点


我没有测试过这个解决方案,但是这里有一个缺失的依赖项:https://github.com/mxcl/UIImageWithColor - Michal Cichon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接