Ios 绘制UIButton/UIBarButtonItem以使用父栏';什么颜色?

Ios 绘制UIButton/UIBarButtonItem以使用父栏';什么颜色?,ios,cocoa-touch,uikit,core-graphics,uibarbuttonitem,Ios,Cocoa Touch,Uikit,Core Graphics,Uibarbuttonitem,我有点进退两难。这不是一个交易破坏者,但如果有一个体面的答案,我很感兴趣 我一直在使用一个带有自定义子视图的uibuttonItem(作为条形按钮项的customView)的UIButton。我的自定义子视图既不是ui标签,也不是ui图像,这就是为什么我要这么做。此UIBarButtonItem是我的导航栏上的一个项目,导航栏设置了tintColor。我希望UIButton具有uiBarButtonimStyleBordeded的圆形矩形外观,这意味着它还应该采用其父栏的tintColor 目前

我有点进退两难。这不是一个交易破坏者,但如果有一个体面的答案,我很感兴趣

我一直在使用一个带有自定义子视图的
uibuttonItem
(作为条形按钮项的
customView
)的
UIButton。我的自定义子视图既不是
ui标签
,也不是
ui图像
,这就是为什么我要这么做。此
UIBarButtonItem
是我的导航栏上的一个项目,导航栏设置了
tintColor
。我希望
UIButton
具有
uiBarButtonimStyleBordeded
的圆形矩形外观,这意味着它还应该采用其父栏的
tintColor

目前的解决方案已经为
UINavigationBarDefaultButton.png
和族实现了从UIKit提取
png
文件。如果我没有设置
tintColor
属性,这看起来会很棒;相反,当我想要明亮的橙色(不是我正在使用的颜色,但你可以理解我的意思)时,按钮仍然是“iOS海军蓝”。这让我陷入了两难境地:让UIButton看起来和表现成那种
uiBarButtonim
风格的最佳方式是什么,包括采用
tintColor
属性?我可以自己在按钮上设置该属性;没什么大不了的

我想在CoreGraphics中绘制该按钮的背景吗?是否有一个框架/库已经实现了这一点?如果我在做不可能的梦,告诉我。我还不太擅长手工制作CoreGraphics,但这绝对不是不可能的

如果做不到这一点,我知道我总是可以使用我试图欺骗的很酷的自定义
UIView
并将其保存为图像(因此在
UIBarButtonItem
中使用
UIImage
),但我想看看这是否可行

这就是我正在处理的(下文)。后退按钮看起来很棒,但这只是因为我没有弄乱它。我希望
rightbuttonite
使用我设置的
tintColor
,但为了让它具有
uibarbuttonimStyleBordered
外观和
customView
设置,我不得不让按钮使用
png
文件作为背景。下面是您看到的内容,即使在
UIBarButtonItem
上设置了
tintColor
(因为它使用的是
png


您可以尝试将UIButton类型设置为“自定义”,并确保其颜色清晰,与自定义视图相同,这样,唯一可见的视图将是UIBarButtonim色调

另外,如果您愿意投资,还有一个名为PaintCode的工具,它可以为您编写CoreGraphics的代码。

我确实在堆栈溢出上找到了它,它让我离得足够近,可以为其余的部分提供支持。这是一篇非常详细的文章,介绍了如何用
UIColor
UIImage
着色;我已经把它拉到一个函数中,我已经发布了一个要点

与此相结合,我在
UIButton
上定义了一个category方法,它允许我创建一个带有背景图像的按钮,并将其着色,然后将其扑通一声放入一个空的
UIBarButtonItem

+ (id)buttonWithBarStyleAndTintColor:(UIColor *)tintColor customView:(UIView *)customView {
    UIImage *defaultNormal = [UIImage imageNamed:@"UINavigationBarDefaultButton.png"];
    UIImage *defaultPressed = [UIImage imageNamed:@"UINavigationBarDefaultButtonPressed.png"];
    UIImage *back = [TintImageWithTintColor(defaultNormal, tintColor)
                     stretchableImageWithLeftCapWidth:5.0
                     topCapHeight:0.0];
    UIImage *pressed = [TintImageWithTintColor(defaultPressed, tintColor)
                        stretchableImageWithLeftCapWidth:5.0
                        topCapHeight:0.0];

    UIButton *button = [self buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, 0, 34.0f, 30.0f);
    [button addSubview:customView];
    customView.userInteractionEnabled = NO;
    customView.frame = CGRectCenterRectInRect(customView.frame, button.frame);
    [button setBackgroundImage:back forState:UIControlStateNormal];
    [button setBackgroundImage:pressed forState:UIControlStateSelected];
    [button setBackgroundImage:pressed forState:UIControlStateHighlighted];
    return button;
}

只需调用
[super tintColor]
[super tintColor]
似乎不起作用;看我的修改。我可能会给PaintCode一个机会,看起来很流畅。不过,您的回答对我没有多大帮助,因为确保我的按钮和自定义视图具有清晰的背景,并且在我的
UIBarButtonItem
上设置淡色只会在工具栏上显示我的自定义视图(地球仪),而不是周围的chrome。