1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UISliderで作る、重なり合う画像のグラデーション効果

Posted at

1. はじめに

iOSアプリ開発において、画像を重ねたレイアウトの透明度を変えることで、視覚的なグラデーション効果を作り出すことができる。レイヤーごとに透明度を変えることで、スライダーの操作に応じて見え方が少しずつ変化し、インタラクティブな視覚効果が生まれる。このブログ記事では、UISliderを用いて3つの画像の透明度を調整し、グラデーションのような効果を得る方法について解説する。

2. グラデーション効果の仕組み

このコードでは、以下のロジックでグラデーション効果を実現している:

  • 重ねた画像の透明度を動的に変更:3つの画像を重ねた状態で、それぞれ異なる透明度が設定されている。スライダーの操作により透明度が変化するため、画像が重なりながら滑らかに見え方が変化する。
  • 異なる透明度が重なって表現される:透明度の変化により、前景の画像が後景の画像を覆うようにフェードイン・フェードアウトし、自然なグラデーション効果が視覚的に表現される。

こうした重なりによる透明度の変化は、複数の画像や色の要素が組み合わさる場面で、柔らかな変化や奥行きを感じさせるビジュアルを作るのに役立つ。

3. 実装コード

以下に、グラデーション効果を実現する透明度調整の実装コードを示す。スライダーを操作すると、3つの重なり合う画像の透明度がそれぞれ少しずつ変わり、グラデーション効果が生まれる。

UISliderの宣言

@IBOutlet weak var opacitySlider: UISlider!

初期透明度の設定

まず、各画像ビューに異なる透明度を設定し、重なったレイヤーがバランスよく見えるように初期値を指定する。なお、スライダーの初期値は任意での設定でよい。

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 初期透明度を設定
    firstImageView.alpha = CGFloat(calcImageViewOpacity(level: "low", sliderValue: opacitySlider.value))
    secondImageView.alpha = CGFloat(calcImageViewOpacity(level: "medium", sliderValue: opacitySlider.value))
    thirdImageView.alpha = CGFloat(calcImageViewOpacity(level: "high", sliderValue: opacitySlider.value))
}

UISliderの値変更時に透明度を更新するメソッド

次に、スライダーを動かしたときに透明度が変わる処理を実装する。透明度が滑らかに変わり、グラデーションが強まったり薄まったりするように見える。

@IBAction func opacitySliderChanged(_ sender: UISlider) {
    // UIViewを更新する
    firstImageView.alpha = CGFloat(calcImageViewOpacity(level: "low", sliderValue: opacitySlider.value))
    secondImageView.alpha = CGFloat(calcImageViewOpacity(level: "medium", sliderValue: opacitySlider.value))
    thirdImageView.alpha = CGFloat(calcImageViewOpacity(level: "high", sliderValue: opacitySlider.value))
}

透明度を計算する関数

それぞれの画像の透明度は、この計算関数で設定する。各画像ごとに異なる透明度の変化パターンがあり、これによって自然な重なりが表現され、滑らかなグラデーションが形成される。

func calcImageViewOpacity(level: String, sliderValue: Float) -> Float {
    switch level {
    case "low":
        return 1 - 2 * sliderValue
    case "medium":
        return sliderValue <= 0.5 ? 2 * sliderValue : -2 * sliderValue + 2
    case "high":
        return 2 * sliderValue - 1
    default:
        return 0.5
    }
}

4. おわりに

このコードを使うことで、スライダーによって重なり合う画像の透明度が滑らかに変化し、視覚的に奥行きや変化を感じさせるグラデーション効果を作り出すことができる。透明度の変化を調整しやすいため、シンプルながら動きのあるUIを手軽に実装するのに適している。また、透明度の計算式やレイヤーの組み合わせを工夫することで、さまざまなビジュアル表現に応用することも可能である。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?