在UISlider中使拇指产生眨眼效果-Swift

问题描述

我必须使滑块的拇指具有“闪烁”效果,但只有拇指而不是整个滑块。我原本以为是使用一个计时器,例如每0.8秒降低和提高拇指的alpha值。

var alpha = 1.0
timerAlpha = Timer.scheduledTimer(withTimeInterval: 0.8,repeats: true)
        {t in 
            self.slider.setThumbImage(thumb,for: UIControl.State(rawValue: UIControl.State.RawValue(alphaValue)))
            self.slider.alpha = CGFloat(alpha)
            if alpha == 1.0{
                alpha = 0.5
            }else{
                alpha = 1.0
            }
        }

但是问题是这样,我使整个滑块闪烁,而不仅仅是拇指。 我如何只让拇指眨眼

解决方法

与其设置整个滑块的alpha,不如使用thumb图像的更“淡化”版本。

First,you need to get a faded version of thumb

let thumb = UIImage(...)! // create the thumb image as you did before
UIGraphicsBeginImageContextWithOptions(thumb.size,false,thumb.scale)
thumb.draw(at: .zero,blendMode: .normal,alpha: 0.5) // find an alpha value that you like
let fadedThumb = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

您可能希望将thumbfadedThumb放在类级别,因此您不必在每次触发计时器时都重新创建它们。另外,添加isUsingFadedThumb属性以跟踪当前状态:

var isUsingFadedThumb = false

然后:

Timer.scheduledTimer(withTimeInterval: 0.8,repeats: true)
    {_ in 
        if self.isUsingFadedThumb {
            self.slider.setThumbImage(thumb,for: .normal)
        } else {
            self.slider.setThumbImage(fadedThumb,for: .normal)
        }
        self.isUsingFadedThumb.toggle()
    }
,

制作一个自定义滑块,在其中创建您自己的拇指图像视图,该视图遵循原始滑块的值。

这样,您可以完全控制拇指。