iOS骰子应用:点击摇骰按钮后如何实现视图淡入并立即恢复默认
解决方案
你的代码仅将视图透明度设置为0.5,但没有恢复至默认1.0的逻辑,导致视图始终保持半透明。要实现点击时的淡入效果,并在切换骰子图片后立即恢复透明度,需要借助UIKit的动画API完成平滑过渡。
以下是修改后的代码:
import UIKit class ViewController: UIViewController { @IBOutlet weak var diceImageView1: UIImageView! @IBOutlet weak var diceImageView2: UIImageView! @IBAction func rollButtonPressed(_ sender: UIButton) { let diceArray = [#imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix")] // 先将视图设为半透明,提供点击反馈 diceImageView1.alpha = 0.5 diceImageView2.alpha = 0.5 sender.alpha = 0.5 // 立即切换骰子图片 diceImageView1.image = diceArray[Int.random(in: 0...5)] diceImageView2.image = diceArray[Int.random(in: 0...5)] // 动画恢复至默认透明度,实现淡入效果 UIView.animate(withDuration: 0.2) { self.diceImageView1.alpha = 1.0 self.diceImageView2.alpha = 1.0 sender.alpha = 1.0 } } }
代码说明:
- 点击按钮时先将骰子和按钮设为半透明,给用户即时的交互反馈
- 切换骰子图片后,通过
UIView.animate执行透明度恢复动画,0.2秒的时长可根据需求调整,让淡入效果更自然 - 动画闭包中修改alpha值,UIKit会自动处理平滑过渡,无需手动管理帧动画
如果需要从完全透明淡入的效果,可将初始alpha设为0,再动画到1.0,代码调整如下:
@IBAction func rollButtonPressed(_ sender: UIButton) { let diceArray = [#imageLiteral(resourceName: "DiceOne"), #imageLiteral(resourceName: "DiceTwo"), #imageLiteral(resourceName: "DiceThree"), #imageLiteral(resourceName: "DiceFour"), #imageLiteral(resourceName: "DiceFive"), #imageLiteral(resourceName: "DiceSix")] // 先隐藏视图 diceImageView1.alpha = 0 diceImageView2.alpha = 0 sender.alpha = 0 // 动画过程中切换图片并淡入显示 UIView.animate(withDuration: 0.3) { self.diceImageView1.image = diceArray[Int.random(in: 0...5)] self.diceImageView2.image = diceArray[Int.random(in: 0...5)] self.diceImageView1.alpha = 1.0 self.diceImageView2.alpha = 1.0 sender.alpha = 1.0 } }
内容的提问来源于stack exchange,提问作者Alexander Junior Souto
相关产品推荐
相关产品推荐

