如何让 iOS 在 UIBarButtonItem 图像上设置渐变?
Posted
技术标签:
【中文标题】如何让 iOS 在 UIBarButtonItem 图像上设置渐变?【英文标题】:How to have iOS set a gradient on UIBarButtonItem image? 【发布时间】:2013-03-03 04:35:04 【问题描述】:只是想知道,我通过以下方式自定义了 UIBarButtonItems
+ (UIBarButtonItem *)createBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *buttonImage = [[UIImage imageNamed:@"blabla.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
CGRect buttonFrame = [button frame];
buttonFrame.size.width = 35;
buttonFrame.size.height = buttonImage.size.height;
[button setFrame:buttonFrame];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
return buttonItem ;
但是现在,我对按钮背景图像没有阴影/光泽效果....
有没有办法让它自动完成,或者我必须以编程方式完成?
编辑:
【问题讨论】:
请分享标准UIBarButtonItem
的截图,你不能只用一张图片。
好的,如图所示,不再有阴影/光泽。这可能是正常行为,只是想知道我是否可以让 ios 自动执行此操作...
在我看来,标准按钮具有相同的高度,请注意光泽效果的外观 - 它始终是水平的(据我所知)。在这种情况下,您需要在图像上添加光泽效果并让它在不损失质量的情况下缩放(提供插图以覆盖边框和角落区域)。运行速度快,看起来很棒,我认为不需要为此使用甚至编写任何特殊代码。
您是否尝试过先调用 [super] 方法来获取 UIBarButtonItem,然后将您的自定义添加到返回的按钮而不是创建一个全新的按钮项?
@A-Live:当然,我可以手动完成,只是不能保证具有相同的图像质量或相同的渐变。对于 AC1:不,我没有尝试(加上这是一个类方法),无论如何,因为它是直接分配,所以运行时应该负责调用超类,不是吗?
【参考方案1】:
要以这种方式完全自定义栏按钮,您需要提供除“blabla.png”中的纯绿色图像之外的其他内容。
处理此问题的另一种方法是使用您的图像创建一个带边框的样式按钮。比如:
UIBarButtonItem* barButton = [UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"blabla.png"] style:UIBarButtonItemStyleBordered target:tgt selector:a];
UIBarButtonItemStyleBordered
样式赋予它 3D 凸起的纽扣外观。如果需要,您可以对其外观进行着色以匹配您的酒吧。
【讨论】:
感谢您的提示。不幸的是,我实例化了一个 Button,而不是 UIBarButton,所以这会产生一个讨厌的警告。 好吧,我想我错过了一些东西。您的 UIButton 只是一个绿色图像。然后看起来你正在从中创建一个 UIBarButtonItem 。完全跳过 UIButton 并使用 UIBarButtonItem。 不是真的,我使用 UIButton 用这个自定义 UIView 初始化 UIBarButton。这会处理图像拉伸、根据文本长度进行调整等...否则,没有方法可以在 UIBarButtonItem 上同时正确分配图像和可变文本长度(至少我不知道) 好的,从图片和描述中看不清楚。您需要修改可拉伸图像以包含您想要的效果。这可以在代码中完成,但不幸的是不能自动完成。以上是关于如何让 iOS 在 UIBarButtonItem 图像上设置渐变?的主要内容,如果未能解决你的问题,请参考以下文章
iOS:删除左侧 uibarbuttonitem 之间的间隙
如何在 UINavigationBar [iOS 7] 中编辑左、右 UIBarButtonItem 的空白
UIBarButtonItem 如何禁用辅助功能 (iOS)