更改UIBarButtonItem视图以编程方式透明

时间:2012-01-09 15:55:18

标签: iphone transparency uinavigationbar opacity uibarbuttonitem

我无法让这个工作,我在网上看到了一个工作的例子。现在提供赏金,因为它让我疯狂。它应该很容易,但似乎并非如此。

我希望我的UINavigationBar上的按钮是半透明的,这样它们就可以显示UINavigationBar上的任何内容。在许多应用中可以看到这种效果,下面是图像示例。您可以通过在项目上设置自定义背景来实现这一点,我认为这是一个不可接受的解决方案,因为它要求您事先准备好图像,并且它们不适用于可变按钮等。它们看起来不像Apple UI和我不相信也有理由这样做,UIKit已经在为这些按钮绘制背景,我们只需要改变它。正确的解决方案使用Apple的apis生成的条形项和视图。

UIBarButtonItem不是UIView的子类。当您创建一个并将其添加到UINavigationBar时,框架中某处的某些代码会为其绘制视图。框架方法似乎抵制了与允许条形项的透明度相关的任何事情,例如tintColor属性。

例如,这不起作用:

 UINavigationItem *item = [[UINavigationItem alloc] init];
 UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"SUCKS" style:UIBarButtonItemStyleBordered target:self action:@selector(whatever:)];
editButton.tintColor = [UIColor colorWithWhite:0.4 alpha:0.3];
item.leftBarButtonItem = editButton;

我所做的任何事都不会让UINavigationBar为其条形项目提供半透明度。我相信在运行时我们需要:

  1. 获取条形图的图像
  2. 屏蔽透明度
  3. 在条形项
  4. 上设置新图像

    但我无法在运行时获取图像或正确掩盖它。你是怎么做到的?

    Like This

5 个答案:

答案 0 :(得分:5)

创建一个自定义uiview并在其中绘制一个半透明的黑色矩形,并将该视图与initWithCustomView一起使用。

see and

如果失败,您可能必须使用图像(png)。例如一个1x1黑色像素png,不透明度为30%。然后你可以使用initWithImage。

编辑:我使用了第二种方法:

buttonThree = [[UIBarButtonItem alloc] initWithTitle:@" sort button " style:UIBarButtonItemStyleBordered target:self action:@selector(sortMethod)];
UIImage *thebgUIimage = [UIImage imageNamed:@"semi.png"];
[buttonThree setBackgroundImage:thebgUIimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

这会生成一个按钮,该按钮具有导航栏背景图像显示的透明背景图像。但是,您需要创建一个带圆角的图像,因此每个按钮宽度需要一个图像。我在尝试上面的

之后找到了this thread

答案 1 :(得分:2)

一个精彩的黑客是将UISegmentedControl与单个段(作为按钮)一起使用并设置其色调颜色。看看http://charles.lescampeurs.org/2011/02/10/tint-color-uibutton-and-uibarbuttonitem。我亲自实现了这一点。随意提出任何问题。

答案 2 :(得分:0)

而不是搜索代码并且破坏你的头脑,我的建议只是让透明图像具有类似于按钮的边框(如果需要添加阴影),创建自定义类型的按钮,向其添加透明背景图像和你可以随意发短信。从此自定义按钮,相应地创建条形按钮项目。

答案 3 :(得分:0)

如果您的目标是iOS 5,则可以设置按钮的背景图片。

    [_button setBackgroundImage:@"image" forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

请注意,您需要为状态UIControlSateSelected设置背景图像,并为barMetrics的两个控件状态设置:UIBarMetricsLandscape,如果您的应用程序允许横向显示。

再次注意这是iOS 5功能。

答案 4 :(得分:0)