2

我使用具有透明度的 .png 图像创建了一个自定义按钮。但是,当我将它实现为 UIImage 时,透明度会丢失。这是我正在使用的代码:

- (void)setMyCustomBackButton;
{
    UIImage *backButtonImage = [UIImage imageNamed:@"Back Button.png"];
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [backButton setBackgroundImage:backButtonImage forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(popCurrentViewController) forControlEvents:UIControlEventTouchUpInside];
    backButton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);


    UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 63, 33)];
    backButtonView.bounds = CGRectOffset(backButtonView.bounds, -12, -2);
    [backButtonView addSubview:backButton];
    UIBarButtonItem *finalBackButton = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
    self.navigationItem.leftBarButtonItem = finalBackButton;
}

是否有用于透明度的 UIImage 属性?跟不透明度有关系吗?

4

1 回答 1

1

如果您在图像编辑软件中创建 PNG,请确保在创建图像时已对透明度进行编码。有时,当您将某些内容导出为 PNG 时,某些图像编辑器有一个默认未选中的“保存透明度”选项。

除此之外,PNG 上的任何透明度都将显示在UIButtonTypeCustom. 您不需要做任何特别的事情来保持UIImage加载 PNG 的透明度。

在代码中使用图像之前,请在预览中打开它以确保存在透明度。

哦,回答你的另一个问题,UIImage 没有任何与透明度有关的属性。您拥有的最接近的东西是alphaa 的属性,UIView但即使这样也只会改变UIView.

编辑:我第一次阅读你的问题时错过了这个。尝试:

UIBarButtonItem *finalBackButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];

不需要有backButtonView。您可以将 UIButton 作为自定义视图传入。我用它来创建自定义栏按钮项目。这应该可以解决您的问题。

编辑 2UIBarButtonItem该类没有您可以设置的 alpha 属性。此外,修改UIButton您设置为UIBarButtonItem自定义视图的 alpha 属性不会影响UIBarButtonItem.

您可以做到这一点的唯一方法是修改用于UIButton.

修改您的原始 PNG 以获得所需的透明度(并且根据您的评论,您需要非常低的透明度)。在导出 PNG 之前,使用图像编辑软件/预览来微调透明度。

于 2013-07-12T00:18:31.157 回答