在我的用例中,我有一个从 0.0 移动到 1.0 的 slider 。移动该 slider 时,我希望按钮的图像从一个图像平滑地淡入另一个图像。该按钮只会在两个图像之间转换。当一个淡入时,另一个淡出,反之亦然。
SO 上有关于如何在固定时间内更改按钮图像的答案,但我找不到基于不断变化的 float 的内容。
那么有没有一种方法可以根据从 0.0 到 1.0 变化的 float 在一段时间内将按钮的图像从一个图像更改为另一个图像?
编辑: 例如,假设一个按钮在您来回移动 slider 时从红色星形图像平滑过渡到绿色星形图像。 (我知道您可以通过其他方式完成此操作,但我想使用两张图片)
最佳答案
试一试。它正在做你想做的事。诀窍是将图层速度设置为 0 并仅更新 timeOffset。
import UIKit
class ViewController: UIViewController {
lazy var slider : UISlider = {
let sld = UISlider(frame: CGRect(x: 30, y: self.view.frame.height - 60, width: self.view.frame.width - 60, height: 20))
sld.addTarget(self, action: #selector(sliderChanged), for: .valueChanged)
sld.value = 0
sld.maximumValue = 1
sld.minimumValue = 0
sld.tintColor = UIColor.blue
return sld
}()
lazy var button : UIButton = {
let bt = UIButton(frame: CGRect(x: 0, y: 60, width: 150, height: 150))
bt.center.x = self.view.center.x
bt.addTarget(self, action: #selector(buttonPress), for: .touchUpInside)
bt.setImage(UIImage(named: "cat1"), for: .normal)
return bt
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(button)
self.view.addSubview(slider)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
addAnimation()
}
func addAnimation(){
let anim = CATransition()
anim.type = kCATransitionFade
anim.duration = 1.0
button.layer.add(anim, forKey: nil)
button.layer.speed = 0
button.setImage(UIImage(named: "cat2"), for: .normal)
}
@objc func sliderChanged(){
print("value \(slider.value)")
button.layer.timeOffset = CFTimeInterval(slider.value)
}
@objc func buttonPress(){
print("pressed")
}
}
关于ios - 通过浮点值将按钮图像从一个图像淡化到另一个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502152/