单击 xcode/swift 时更改按钮的不透明度

Zac*_*ler 16 xcode ios swift

我有一个带有图像的 UIButton 设置,默认情况下,当用户按下按钮时,图像的不透明度会降低到 30% 左右。

我想知道如何防止这种情况发生以及如何将不透明度设置为我需要的任何值。

小智 45

添加视图控制器,如果您想以编程方式更改不透明度和时间延迟。

@IBAction func keyPressed(_ sender: UIButton) {
  playSound(soundName: sender.currentTitle!)

  //Reduces the sender's (the button that got pressed) opacity to half.
  sender.alpha = 0.5

  //Code should execute after 0.2 second delay.
  DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
      //Bring's sender's opacity back up to fully opaque.
      sender.alpha = 1.0
  }
}

func playSound(soundName: String) {
    let url = Bundle.main.url(forResource: soundName, withExtension: "wav")
    player = try! AVAudioPlayer(contentsOf: url!)
    player.play()
}
Run Code Online (Sandbox Code Playgroud)

  • 来自 Angela Yu 的 Udemy Swift 课程,我注意到这个片段包含了课程中与所问问题完全无关的代码。播放声音与更改按钮的不透明度没有任何关系。 (12认同)
  • @Henry我现在正在学习这门课程。我想我也可以通过这个答案免费获得 0.2 秒的延迟! (4认同)
  • 啊啊我哥直接从Angela Yu udemy 课程直接来到StackOverFlow (3认同)

小智 11

斯威夫特 5

您可以通过使用DispatchQueue来做到这一点。更重要的是,要使过渡“平滑”,请使用UIView.animate

只需更改 alpha 参数。

@IBAction func keyPressed(_ sender: UIButton) {

    sender.alpha = 0.5

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3 ) {
        sender.alpha = 1.0
    }
}
Run Code Online (Sandbox Code Playgroud)

参数的平滑变化。

@IBAction func keyPressed(_ sender: UIButton) {

    UIView.animate(withDuration: 0.3) {
        sender.alpha = 0.5
    }

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3 ) {
        UIView.animate(withDuration: 0.3) {
            sender.alpha = 1.0
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 9

如果你想改变不透明度,你应该使用下面的代码。Alpha 基本上就是不透明度。您实际上可以更改底部部分的时间,例如您希望其变暗的时间长度,您还可以更改 sender.alpha 值,例如您希望其变暗的程度。

@IBAction func keyPressed(_ sender: UIButton) 
{          
    //Reduces the sender's (the button that got pressed) opacity to half.
    sender.alpha = 0.5
    //Code should execute after 0.2 second delay.
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
    //Bring's sender's opacity back up to fully opaque.
    sender.alpha = 1.0
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您缺少 DispatchQueue 的右括号 (2认同)

小智 7

我不喜欢这些答案,因为它们让用户认为按钮在点击时会改变颜色,但只是模仿苹果已经为我们提供的功能。在我看来,最佳功能将允许按钮仅在按下时更改其不透明度,然后在未选择时恢复。在 Swift 5 中尝试一下:

1)创建一个新的swift文件,名为SomeCustomBtn

2)插入此代码:

import UIKit

class SomeCustomBtn: UIButton {
override open var isHighlighted: Bool {
    didSet {
        alpha = isHighlighted ? 0.5 : 1.0
    }
}
}
Run Code Online (Sandbox Code Playgroud)

3)将您的自定义类添加到您的按钮,iOS 将根据属性自动更改您的 alpha isHighlighted


小智 5

如果您想随时以编程方式更改不透明度,请添加到 AtWork。

button.alpha = 0.30 // Make sure to use CGFloat literals
button.alpha = 1
button.alpha = 0
Run Code Online (Sandbox Code Playgroud)


AtW*_*ork 0

您只需简单地设置adjustsImageWhenHighlighted为即可NO

button.adjustsImageWhenHighlighted = NO;
Run Code Online (Sandbox Code Playgroud)

如果它对您不起作用,请告诉我。