我有一个带有图像的 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)
小智 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)
小智 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)
您只需简单地设置adjustsImageWhenHighlighted为即可NO。
button.adjustsImageWhenHighlighted = NO;
Run Code Online (Sandbox Code Playgroud)
如果它对您不起作用,请告诉我。