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