7

iOS6 以前のボタンのように見える独自のカスタム ボタンを作成するだけですが、iOS7 では CustomButton が強調表示されると透明になります。プロパティadjustsImageWhenHighlightedをNOに設定しようとしましたが、何も変わらず、[self setAlpha:1.f]も機能しません。

以下、私のinitメソッド:

-(void) baseInit:(CGRect)frame :(CGFloat *)colorsNormal :(CGFloat *)colorsHighlighted :(CGFloat *)colorsDisabled
{

    self.layer.borderWidth=1.0f;
    self.layer.borderColor=[[UIColor colorWithRed:0.67f green:0.67f blue:0.67f alpha:1.0f] CGColor];
    self.layer.cornerRadius=7.0f;

    self.clipsToBounds = YES;

    UIImage *image = [self generateUIImageWithGradient:frame :colorsNormal];
    [self setBackgroundImage:image forState:UIControlStateNormal];
    [self setTitleColor:[UIColor colorWithRed:0.22f green:0.33f blue:0.53f alpha:1.0f] forState:UIControlStateNormal];

    UIImage *image2 = [self generateUIImageWithGradient:frame :colorsHighlighted];
    [self setBackgroundImage:image2 forState:UIControlStateHighlighted];
    [self setTitleColor:[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f] forState:UIControlStateHighlighted];

    UIImage *image3 = [self generateUIImageWithGradient:frame :colorsDisabled];
    [self setBackgroundImage:image3 forState:UIControlStateDisabled];
}

-(id) generateUIImageWithGradient:(CGRect)frame :(CGFloat *)colors
{
    CGSize size = CGSizeMake(frame.size.width, frame.size.height);
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();

    size_t gradientNumberOfLocations = 2;
    CGFloat gradientLocations[2] = {0.0, 1.0};

    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorspace, colors, gradientLocations, gradientNumberOfLocations);

    CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(0, size.height), 0);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    CGGradientRelease(gradient);
    CGColorSpaceRelease(colorspace);
    UIGraphicsEndImageContext();

    return image;
}

そして私のメソッド呼び出し:

CGFloat colorsNormal [] = {1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f};
CGFloat colorsHighlighted [] = {0.03f,0.55f,0.97f,1.0f,0.0f,0.37f,0.90f,1.0f};
CGFloat colorsDisabled [] = {1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f};

[self baseInit:rect :colorsNormal :colorsHighlighted :colorsDisabled];

それはiOS6では魅力的に機能し、iOS7ではNormalStateが機能します。

ご協力いただきありがとうございます

4

1 に答える 1

26

ボタンのタイプ プロパティを UIButtonTypeCustom に設定すると、うまくいくようです。問題が解決しました。

于 2013-10-09T10:24:59.240 に答える