针对不同状态更改 UIButton 的渐变

Posted

技术标签:

【中文标题】针对不同状态更改 UIButton 的渐变【英文标题】:Change gradient for UIButton for different states 【发布时间】:2011-12-13 09:51:29 【问题描述】:

最近我遇到了一个问题。我有一个 UIButton 和 2 个图像。 1 表示正常状态,1 表示突出显示。问题是正常状态图像是透明的,我应该使用渐变来填充它。但如果我这样做,我突出显示的图像永远不会出现。以下是部分代码:

    UIImage *balloonImage = [[UIImage imageNamed:@"balloon.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 3)];
    UIImage *balloonImageDown = [[UIImage imageNamed:@"balloon-down.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 3)];

    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = CGRectMake(0, 0, 320 - 45 - 10, 100);
    gradient.cornerRadius = 3.0f;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:221.0f/255.0f green:231.0f/255.0f blue:246.0f/255.0f alpha:1.0f]CGColor], (id)[[UIColor colorWithRed:191.0f/255.0f green:207.0f/255.0f blue:234.0f/255.0f alpha:1.0f] CGColor], nil];
    self.balloonButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.balloonButton.layer insertSublayer:gradient atIndex:0];
    [self.balloonButton setBackgroundImage:balloonImage forState:UIControlStateNormal];
    [self.balloonButton setBackgroundImage:balloonImageDown forState:UIControlStateHighlighted];
    self.theImageView = [[[UIImageView alloc]init]autorelease];
    [self.balloonButton addSubview:theImageView];
    [self.contentView addSubview:balloonButton];

渐变看起来应有的效果,一切正常。除非点击按钮时更改图像。

有没有办法将 balloonImageDown 放在渐变前面?或者我该怎么做?

任何帮助将不胜感激。

【问题讨论】:

是的!我想你的意思是放一个透明层? 您是否考虑过将渐变颜色的 alpha 参数更改为低于不透明的值?喜欢从 1.0 到 0.4? 【参考方案1】:
[yourButton setTitleColor:[UIColor colorWithRed:0.3 green:0.6 blue:0.9 alpha:0.5]
//                                set 'alpha' to something less than 1. -----^^^

这就是你要让它透明的方法。(改变 alpha 值) 您应该在 touchdown 和 touch up 方法中更改这些值。

【讨论】:

以上是关于针对不同状态更改 UIButton 的渐变的主要内容,如果未能解决你的问题,请参考以下文章

突出显示时更改 UIButton 的背景颜色

蓝色渐变图像被错误地拉​​伸为 UIButton 的橙色渐变图像

Swift - UIButton 改变宽度

根据状态更改 UIButton 中 ImageView 的 tint 颜色

以编程方式将渐变边框颜色应用于 UIButton

在 UITableView 顶部按下时,UIButton 不会更改其状态