iOS - 如何在Swift中显示“AirPlay”弹出菜单?

6
我该如何在我的Swift项目中显示一个AirPlay弹出菜单?(像Spotify这样的许多应用程序可以显示如下所示的菜单):

enter image description here


考虑在您的应用程序中添加“MPVolumeView”。实际上,您不需要创建菜单,但是通过拥有该控件,用户可以在单击它时看到该菜单。 - totiDev
2个回答

10

看起来没有简单明了的方法能够使自定义按钮显示系统的Airplay菜单。

然而,@totiG给我指了一个有趣的资源,我创建了一个脚本,在屏幕的可见区域之外创建了标准的音量控件,并模拟点击了Airplay按钮:

func showAirplay() {
    let rect = CGRect(x: -100, y: 0, width: 0, height: 0)
    let airplayVolume = MPVolumeView(frame: rect)
    airplayVolume.showsVolumeSlider = false
    self.view.addSubview(airplayVolume)
    for view: UIView in airplayVolume.subviews {
        if let button = view as? UIButton {
            button.sendActions(for: .touchUpInside)
            break
        }
    }
    airplayVolume.removeFromSuperview()
}

运行此代码后,将出现以下弹出菜单:

输入图像描述


使用这段代码,我只得到了一个透明的矩形,没有任何滑块或按钮。 - Sergey Didanov
@SergeyDi:我已经添加了一张截图,展示了这段代码在我的环境中的运行情况。你的情况不是也应该一样吗?你使用的是哪个iOS版本? - adamsfamily

4
这里有一个巧妙的解决方案,可以避免使用MPVolumeView的按钮。
1. 创建一个MPVolumeView,并将其隐藏在视图层级中的某个位置。 2. 每当您想要显示选择器时:
[[UIApplication sharedApplication] sendAction:NSSelectorFromString(@"_displayAudioRoutePicker") to:myVolumeView from:myView forEvent:nil];
可选步骤3:在iPad上,您需要传递一个UIEvent,否则弹出窗口将只进入屏幕顶部,看起来很奇怪。从- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;捕获事件并将其传递到我们的调用中。

我知道有点晚了,但这是私有API吗?(如果我使用它,我的应用程序会被接受到应用商店吗?) - Minebomber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接