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

Posted

技术标签:

【中文标题】iOS - 如何在 Swift 中显示“AirPlay”弹出菜单?【英文标题】:iOS - How can I display an 'AirPlay' popup menu in Swift? 【发布时间】:2017-07-03 06:39:58 【问题描述】:

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

【问题讨论】:

看看在你的应用中添加一个“MPVolumeView”。您实际上并没有创建菜单,但是通过拥有该控件,它将允许用户在单击该菜单时看到该菜单。 【参考方案1】:

毕竟似乎没有简单直接的方法可以让自定义按钮显示系统的 Airplay 菜单。

但是,@totiG 将我指向一个有趣的资源,我创建了一个脚本,该脚本在屏幕可见区域之外创建标准音量控制 a 模拟单击​​ 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()

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

【讨论】:

使用这段代码我只得到了没有任何滑块或按钮的透明矩形。 @SergeyDi:我在上面添加了一个屏幕截图,以显示这段代码在我的环境中的作用。它对你来说不是一样的吗?你运行的是哪个 ios 版本?【参考方案2】:

这是一个不得不使用 MPVolumeView 按钮的好方法。

    创建一个 MPVolumeView,并将其隐藏在视图层次结构中的某处。 只要您想显示选择器:

[[UIApplication sharedApplication] sendAction:NSSelectorFromString(@"_displayAudioRoutePicker") to:myVolumeView from:myView forEvent:nil];

可选 3: 在 iPad 上,您需要传递 UIEvent 否则弹出框只会在屏幕顶部输入,并且看起来很奇怪。从- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 捕获事件并将其传递给我们的调用。

【讨论】:

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

以上是关于iOS - 如何在 Swift 中显示“AirPlay”弹出菜单?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:如何在 UIViewController 中隐藏和显示按钮

如何使用 Swift 在 iOS 中显示从 HealthKit 中检索到的 HKDocumentSample?

iOS 如何显示用户的前进方向 Swift

如何在 UILabel 中显示名字?我正在使用 Firebase 和 Swift 开发 IOS 应用程序

如何在 SWIFT3 XCODE 8.2 的 IOS 应用程序中显示 Snackbar 的操作中的特定视图

如何在 CollectionView iOS Swift 4 中显示不显示单元格的标题?