ios - 通过浮点值将按钮图像从一个图像淡化到另一个图像

标签 ios swift uibutton

在我的用例中,我有一个从 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")
        }
    }

结果如下: slidegif

关于ios - 通过浮点值将按钮图像从一个图像淡化到另一个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502152/

相关文章:

iphone - MKStoreKit 是在应用程序订阅中用于自动更新的正确选项吗?

javascript - 滑动以显示/隐藏div?

ios - 进一步扩展可扩展表格 View 单元格

ios - 如何在没有库的情况下从上到下制作自定义 iOS 分段控件?

ios - Swift - 当设备处于静音状态时,AVAudioPlayer 仍在播放声音吗?

ios - 在 UI ImageView 中检索和显示保存的图像(文档文件夹)

ios - Firestore 安全规则在模拟器中有效,但在应用程序中失败

ios - UIScrollView 中的 UIView 没有出现

ios - UIButton Outlet 设置标题 Swift

ios - 自定义 UITableViewCell 中的 UIButton 导致在多个单元格中选择按钮