1

IOS7 には、背景のアルファ チャネルが .5 に設定されたボタンがいくつかあります (したがって、それらの背後にある画像が多少見えるようになります)。唯一の欠点は、ボタン面のテキストも薄暗くなることです。ボタンの下で を使用して、UIViewアルファを .5 に設定してみました。これは機能しますが、石畳のようなものです。また、両方の項目の制約を管理するのは少し面倒です。背景のアルファ設定を低く保ちながら、ボタンのテキストを明るく鮮明にする方法はありますか?

4

2 に答える 2

0

これは、 を使用してあまり手間をかけずに実行できますCoreGraphics。これがまさにこれを行うために作成したクラスです。(SODimButtonこの回答の例として名前を付けました。)ここに投稿されたコードは、この要点にもあります。

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];

簡単なテストと実験のために、このリンクにすべてのコードを(少なくともしばらくの間) 入れました。楽しみ!

于 2013-10-14T18:02:50.360 に答える
-1

数日後、それを理解できなかったので、半透明のボタンの上にラベルを追加し、回転用のボタンと並べておくためのいくつかの制約を加えました.

于 2013-10-10T17:04:30.220 に答える