1

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

4

2 回答 2

0

这可以在不使用太多工作的情况下完成CoreGraphics。这是我专门为此而设计的课程。(我已将其命名SODimButton为此答案的示例。)此处发布的代码也可以在此 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 (in 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];

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

于 2013-10-14T18:02:50.360 回答
-1

几天后,我想不通,所以我只是在半透明按钮的顶部添加了一个标签,以及一些约束以使其与按钮对齐以进行旋转。

于 2013-10-10T17:04:30.220 回答