4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

YoutubeアプリのミニプレイヤーのようなViewを実装する

Last updated at Posted at 2023-02-25

普段何気なく使っていたYouTubeアプリですが、そのミニプレイヤーは結構面白い動作をしています。

画像はYouTube Musicのものですが、ミニプレイヤーは具体的には以下のようなものです。

名称未設定.gif

YouTubeアプリもほぼ同じような動作です。

ハーフモーダルではなく、下部のタブバーと連動し、同一ビューでサイズを変えて、その内部でパーツのサイズを変えてシームレスにUIを変更しています。

サイズの変更は縦スワイプで行えます。

このViewの実装はどうやるんだろうと思い、いろいろ調べてみたのですが、実装方法やライブラリーをうまく見つけることができませんでした。

でもまあ、見つけられないならしょうがないので、とりあえずガワの部分だけでも実装してみることにしました。


その結果のソースはこちらで、Playgroundにコピペで動作します。

名称未設定-2.gif


基本的にはジェスチャーの移動量に応じて、オートレイアウトでビューの高さと下マージンを変更する、というものになります。

当初はframeでやろうとしていたのですが、下マージンの兼ね合いでY座標の計算が非常に面倒でしたのでオートレイアウトに切り替えたところ、非常にシンプルになりました。

また当初はスワイプを検出するUISwipeGestureRecognizerで良いのかと思っていたのですが、こちらはiOSで既定されているスワイプ動作を行った際に発火するもので、移動量の取得はできないようです。

移動量を取得する際にはUIPanGestureRecognizerを利用する必要があるようです。

L68-

    /// ジェスチャーの設定
    private func setGestureRecognizer() {
        let recognizer = UIPanGestureRecognizer(target: self, action: #selector(onPanGesture(_:)))
        addGestureRecognizer(recognizer)
    }

今後いろいろ使いまわせるように、極力MiniPlayerView内に処理を収めたいという方針でやってみたのですが、結果的に大部分を収めることができました。

こちらはいろいろ調べている最中に見つけたものですが、View内部よりsuperviewでオートレイアウトを設定する、というテクニックは今後いろいろ使えそうです。

L84-

        // 制約の設定
        translatesAutoresizingMaskIntoConstraints = false
        heightConstraint = heightAnchor.constraint(equalToConstant: minHeight)
        bottomConstraint = bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: maxMargin)
        NSLayoutConstraint.activate([heightConstraint, bottomConstraint,
                                     leftAnchor.constraint(equalTo: superview.leftAnchor),
                                     rightAnchor.constraint(equalTo: superview.rightAnchor)])

とりあえずView自体の動きだけ試しに実装してみましたが、View内部のUIの動きはオートレイアウトでやっていくことになるでしょう。

タブバーなど外部のUIとの連携はデリゲートなりCombineなどを実装する必要はあり、Viewの継承元クラスとして使えるようにはなっておらず、使い回しは現状できませんが、実際に使う段階で考えたいと思います。

4
1
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?