LoginSignup
5
6

More than 5 years have passed since last update.

UISlider の Thumb をアニメーションで非表示に

Last updated at Posted at 2019-02-06

UISlider の Thumb (つまみ) を Youtube アプリのプレーヤーのようにアニメーションで表示/非表示を切り替えたいなというきっかけ。

環境

  • Swift 4.2
  • Xcode 10.1

コード

// 1. Thumb の UIImageView を取得
extension UISlider {   
    var currentThumbImageView: UIImageView? {
        guard let image = self.currentThumbImage else { return nil }
        return self.subviews.compactMap({ $0 as? UIImageView }).first(where: { $0.image == image })
    }
}

// 2-1. 表示
UIView.animate(withDuration: 0.3) {
    self.slider.currentThumbImageView?.transform = CGAffineTransform(scaleX: 1, y: 1)
}

// 2-2. 非表示
UIView.animate(withDuration: 0.3) {
    self.slider.currentThumbImageView?.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)
}

ポイント

// 1. Thumb の UIImageView を取得
手軽にできない理由が、 UISlider には var currentThumbImage: UIImage? プロパティで Thumb の UIImage は取れるのに、 UIImageView を取るプロパティがないということです。
subviews[2] が基本的に Thumb の UIImageView のようですが、念の為上記コードのようにセーフティに取得しています。

// 2. 表示, 非表示
もうあとは transform で変化させるだけです。ご自由にどうぞ。
今回の例でいうと、非表示にするとき CGAffineTransform(scaleX: 0, y: 0) とするのはエラーとなりますのでご注意ください。

おまけ

ただ Thumb を消すだけで良ければ下記でOK。

slider.setThumbImage(UIImage(), for: .normal)

参考

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6