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。