如何在不影响文本的情况下更改IOS中按钮的Alpha通道?

时间:2013-10-09 13:55:46

标签: uibutton ios7 uistoryboard

我在IOS7中有几个按钮,背景Alpha通道设置为.5(因此它们后面的图像有些可见)。唯一的缺点是按钮面上的文字也变得暗淡。我尝试在按钮下使用UIView并将其alpha设置为.5;这是有效的,但有点拼凑在一起。此外,管理这两个项目的约束有点单调乏味。有没有办法保持背景Alpha设置低,但按钮文字漂亮,明亮/清脆?

2 个答案:

答案 0 :(得分:0)

使用CoreGraphics无需过多工作即可完成此操作。这是我为此做的课程。 (我已将其命名为SODimButton作为此答案的示例。)此处发布的代码也可以在this gist中找到。

SODimButton.h

#import <UIKit/UIKit.h>

@interface SODimButton : UIButton

@property (nonatomic, strong) UIColor *buttonColor;
@property (nonatomic, strong) UIColor *selectedButtonColor;

@property (nonatomic) CGFloat backgroundAlpha;

@end

SODimButton.m

#import "SODimButton.h"

@implementation SODimButton

- (void)drawRect:(CGRect)rect {
    // More drawing can be done if you get the context.
    // I actually don't use it in this example.
    CGContextRef context = UIGraphicsGetCurrentContext();

    if (self.selected || self.highlighted) {
        [[self.selectedButtonColor colorWithAlphaComponent:self.backgroundAlpha] setFill];
    } else {
        [[self.buttonColor colorWithAlphaComponent:self.backgroundAlpha] setFill];
    }
    UIRectFill(rect);
}

- (void)setSelected:(BOOL)selected {
    [super setSelected:selected];
    [self setNeedsDisplay];
}

- (void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

@end

...以下是如何在控制器中使用它:

MyViewController.m(在viewDidLoad

SODimButton *button = [[SODimButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width / 2 - 100, 50, 200, 44)];
[button setTitle:@"My Button" forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
button.buttonColor = [UIColor redColor];
button.selectedButtonColor = [UIColor colorWithRed:0.73f green:0.10f blue:0.00f alpha:1.00f];
button.backgroundAlpha = 0.2f;
[self.view addSubview:button];

我已将所有这些代码放入this link(至少一段时间)以便于测试和实验。享受!

答案 1 :(得分:-1)

几天之后,无法理解,所以我只是在半透明按钮的顶部添加了一个标签,还有一些限制条件,使它与旋转按钮对齐。