如何在我自己的应用程序中实现 Apple Music 中的迷你播放器?
Posted
技术标签:
【中文标题】如何在我自己的应用程序中实现 Apple Music 中的迷你播放器?【英文标题】:How can I implement the miniplayer in Apple Music in my own app? 【发布时间】:2015-08-27 23:56:35 【问题描述】:Apple 在 ios 8.4 上的 Apple Music 中引入了新的 UI。
当一个音轨开始播放时,一个迷你播放器会出现在标签栏的正上方,通过向上拖动或点击它可以进入全屏模式。
我想这是使用 UIViewController 包含 API。我可以从哪里开始我自己的实现?
我该如何实现类似的东西?
【问题讨论】:
【参考方案1】:有趣的是,我在本周早些时候遇到了一个实施该框架的框架。给LNPopupController看看。它实现了您正在寻找的行为(显示迷你栏,然后点击或拖动以显示视图控制器)。如果它不能完全满足您的需求,也许它至少可以为您提供一个起点来实现自己的东西。
【讨论】:
谢谢。它看起来有据可查。去看看代码吧。 感谢您向我指出这个框架。看起来棒极了,应该可以完美地满足我的需求!【参考方案2】:在您的根视图控制器中添加一个容器视图,用于 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 来实现。在根 viewController 中注册通知。
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)
【讨论】:
以上是关于如何在我自己的应用程序中实现 Apple Music 中的迷你播放器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Sandbox 的应用购买中实现和测试 iOS 上的免费试用?如何通过 Apple 收据验证流程和试用信息?