改变UIButton中UIImageView的alpha值

3

有没有办法更改UIButton的imageview的alpha值?我已经尝试了子类化UIButton并执行以下代码,但它不起作用。

self.imageView.alpha = 0.0;

我知道可以通过将外部UIImageView添加为UIButton的子视图来完成,但我想知道是否可以不这样做。谢谢!


@Mr. T,我不想改变按钮的 alpha 值。 - sanjana
据我所知,唯一的方法是修改图像本身的 alpha 值,因为 UIButton 经常重置其大部分子视图。 - Tobi Nary
@Igor 我该怎么做?UIImage 没有直接可访问的 alpha 属性,至少我在这里正在寻找一些简单的解决方案,否则我可以将 UIImageView 添加为 UIButton 的子视图来实现复杂的解决方案。 - sanjana
@JanGreve 是的,那就是我得出的结论,但我想在这里试着问一下。因为同样的事情对于 UIButton 的 titleLabel 完全没有问题。这段代码可以正常工作:self.titleLabel.alpha = 0; - sanjana
@sanjana >我该怎么做?https://dev59.com/_W445IYBdhLWcg3wAFm0 - Igor
显示剩余5条评论
5个回答

4
可能是一种不太规范的方式。
for (UIView *view in myButton.subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
          view.alpha = 0.5;
    }
}

那是倒数第二种方法 :) - sanjana
1
同样,这将产生相同的效果 - 它会一直工作,直到按钮再次布置其子视图。 - Tobi Nary
@JanGreve 你说得对。我不知道为什么SwiftArchitect的代码可以运行,而我的却不能 :( 你有什么想法吗? - sanjana
@sanjana,那是因为滑块的选择器经常设置值。 - Tobi Nary
@JanGreve 我不认为我理解了,但如果我将一些值设置为滑块并停止它,则会保留我之前拥有的alpha值... - sanjana

3

通过子类化(将在布局更改中幸存)

override func layoutSubviews() {
    super.layoutSubviews()
    if let imageView = imageView {
        imageView.alpha = 0.2
    }
}

没有子类(瞬时的,适用于动画)

if let imageView = imageButton.imageView {
    imageView.alpha = CGFloat(sender.value)
}

Subclass Source Code

@IBDesignable class FadeButton: UIButton {

    @IBInspectable var imageAlpha: CGFloat = 1 {
        didSet {
            if let imageView = imageView {
                imageView.alpha = imageAlpha
            }
        }
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        if let imageView = imageView {
            imageView.alpha = imageAlpha
        }
    }
}

使用imageButton.imageAlpha = alpha调用。

演示

淡入淡出演示

► 在GitHub上查找此解决方案,以及有关Swift Recipes的其他详细信息。


1
这只能工作是因为它被设置的频率比按钮布局的频率更高。 - Tobi Nary
@swiftArchitect 嗯,这很奇怪,因为我发布的代码肯定是不起作用的。 - sanjana
@JanGreve 是正确的:你需要进行子类化才能使值持久化。 - SwiftArchitect

1
总结其他答案的评论:子类化和/或添加另一个 UIImageView 是实现持久、可靠行为的最简单选择。

0

你可以通过改变 UIImage 的 alpha 值来实现。

Swift 版本请参考 this answer,Obj-C 版本请参考 this one


0

我最近也需要类似的东西。我想要一个按钮,可以添加图像作为背景,然后有半透明的颜色覆盖在图像上,从而创建一个自定义颜色的图像按钮类型。

我找到的方法是:

  • UIImageView(包含所需的图像)
  • UIView(保持颜色,alpha = 0.7ish)
  • UIButton无颜色/透明。

它们都具有相同的大小,宽度,位置和以上顺序层叠。 这样您就可以控制图像将是什么(以及必要时其alpha),在图像上方有染色的覆盖层(使用所需的alpha),然后在其上部放置透明的可点击按钮。


你好,欢迎来到Stackoverflow。您能和我们分享一些您的代码吗? - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接