【问题标题】:Change alpha of imageview of UIButton更改 UIButton 的 imageview 的 alpha
【发布时间】:2016-05-04 13:46:36
【问题描述】:

有什么方法可以改变 UIButton 的 imageview 的 alpha 值吗?我已经尝试过继承 UIButton 并执行以下代码,但它不起作用。

self.imageView.alpha = 0.0;

我知道可以通过将外部 UIImageView 作为子视图添加到 UIButton 来完成,但我想知道没有它是否可能。谢谢!

【问题讨论】:

  • 你可以尝试改变 UIImage alpha
  • 你不能改变按钮的 alpha 吗?
  • @Mr.T 我不想更改按钮的 alpha。
  • Afaik,唯一的方法是修改图像本身的 alpha,因为 UIButton 一直重置它的大部分子视图。
  • @Igor 我该怎么做? UIImage 至少没有可直接访问的 alpha 属性,在这里我正在寻找一些简单的解决方案,否则对于复杂的解决方案,我可以将 UIImageView 作为子视图添加到 UIButton。

标签: ios objective-c uibutton


【解决方案1】:

带有子类(将在布局更改后继续存在)

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

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

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

子类源代码

@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 上查找更多详细信息。

【讨论】:

  • 这只是因为它的设置比按钮的布局更频繁。
  • @swiftArchitect 嗯,这很奇怪,因为我发布的代码肯定不起作用。
  • @JanGreve 是正确的:您需要子类化才能使值持久
【解决方案2】:

可能是一种骇人听闻的方式

for (UIView *view in myButton.subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
          view.alpha = 0.5;
    }
}

【讨论】:

  • 这是倒数第二个方式:)
  • 另外,这会产生相同的效果 - 它会一直工作,直到按钮再次显示它的子视图。
  • @JanGreve 你是对的。我不知道 SwiftArchitect 代码是如何工作的,而我的却没有 :( 你有什么想法吗?
  • @sanjana,这是因为滑块中的选择器经常真的设置值。
  • @JanGreve 不认为我理解,但如果我为滑块设置一些值并停止它会保留我之前的 alpha...
【解决方案3】:

总结其他两个答案的 cmets:子类化和/或添加另一个 UIImageView 是归档持久、依赖行为的最简单选择。

【讨论】:

    【解决方案4】:

    您可以通过更改 UIImage 的 alpha 来做到这一点。

    请参阅this answer 获取 Swift 版本和 this one 获取 Obj-C 版本。

    【讨论】:

      【解决方案5】:

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

      我发现的方法是:

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

      它们都具有相同的大小、宽度、位置,并按上述顺序分层。 这样,您可以指定图像的内容(以及必要时的 alpha)、图像顶部的彩色叠加层(根据需要使用 alpha),然后在顶部设置一个透明的可点击按钮。

      【讨论】:

      • 您好,欢迎来到 Stackoverflow。您能否与我们分享您的一些代码?
      猜你喜欢
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 2019-12-14
      • 2013-03-16
      • 2016-09-06
      • 1970-01-01
      • 2012-01-04
      相关资源
      最近更新 更多