簡體   English   中英

如何在我自己的應用程序中實現 Apple Music 中的迷你播放器?

[英]How can I implement the miniplayer in Apple Music in my own app?

Apple 在 iOS 8.4 上的 Apple Music 中引入了新的 UI。

當一個音軌開始播放時,一個迷你播放器會出現在標簽欄的正上方,通過向上拖動或點擊它可以進入全屏模式。

我想這是使用 UIViewController 包含 API。 我可以從哪里開始我自己的實現?

我該如何實現類似的東西?

有趣的是,我在本周早些時候遇到了一個框架,它實現了這個。 看看LNPopupController 它實現了您正在尋找的行為(顯示一個迷你欄,然后點擊或拖動以顯示一個視圖控制器)。 如果它不太適合您的需求,也許它至少可以為您實現自己的東西提供一個起點。

在您的根視圖控制器中添加一個容器視圖,用於 Apple Music uiTabBar控制器。

func configureContainer() {
        
        // add container
        containerView = UIView()
        containerView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(containerView)
        
        let g = view.safeAreaLayoutGuide
        NSLayoutConstraint.activate([
            containerView.leadingAnchor.constraint(equalTo: g.leadingAnchor),
            containerView.trailingAnchor.constraint(equalTo: g.trailingAnchor),
            containerView.bottomAnchor.constraint(equalTo: tabBar.topAnchor),
            containerView.heightAnchor.constraint(equalToConstant: 64.0)
        ])
        
        // add child view controller view to container
        miniPlayer = MiniPlayerViewController()
        guard let miniPlayer = miniPlayer else { return }
        addChild(miniPlayer)
        miniPlayer.view.translatesAutoresizingMaskIntoConstraints = false
        containerView.addSubview(miniPlayer.view)
        
        
        // Create and activate the constraints for the child’s view.
        guard let miniPlayerView = miniPlayer.view else { return }
        NSLayoutConstraint.activate([
            miniPlayerView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
            miniPlayerView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
            miniPlayerView.topAnchor.constraint(equalTo: containerView.topAnchor),
            miniPlayerView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor),
        ])
        
        miniPlayer.didMove(toParent: self)
    }

就我而言,我想將miniPlayer隱藏在一個特定的 VC 中,因此我使用 NotificationCenter 來做到這一點。 在根視圖控制器中注冊通知。

NotificationCenter.default.addObserver(self, selector: #selector(miniPlayerVisibilityNeedsChange(notify:)), name: NSNotification.Name("miniPlayerVisibilityNeedsToBeUpdate"), object: nil)

將其發布在您的特定 VC 中,就是這樣!

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        // hide miniPlayer for this vc
        NotificationCenter.default.post(name: NSNotification.Name("miniPlayerVisibilityNeedsToBeUpdate"), object: false)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        
        // show miniPlayer again when leaving this vc
        NotificationCenter.default.post(name: NSNotification.Name("miniPlayerVisibilityNeedsToBeUpdate"), object: true)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM