我正在为iOS 7设计一个音乐应用程序,我想直接在我的应用程序中放置"AirPlay"路由选择器按钮.我可以将按钮放置得很好,但它不会显示,因为图标是白色的,我的背景是白色的.
有没有办法改变路线按钮的颜色?
这是我用来创建按钮的代码.
self.airPlayButton = [[MPVolumeView alloc] initWithFrame:CGRectZero];
self.airPlayButton.showsVolumeSlider = NO;
[self.airPlayButton sizeToFit];
self.airPlayButton.backgroundColor = [UIColor myGreenColor];
[self addSubview:self.airPlayButton];
Run Code Online (Sandbox Code Playgroud)
基本上下面的图片是我想要的,除了我想要的图标绿色而不是它的背景.

从iOS 11的第3版开始,我的应用程序在初始化用于AirPlay的MPVolumeView时开始崩溃.以下代码在早期版本的iOS和iOS 11 beta 1和2上运行得非常好.
func setupAirplayButton() {
let rect = CGRect(x: -1000, y: -1000, width: 10, height: 10)
volumeView = MPVolumeView(frame: rect) //app crashes here
volumeView.showsVolumeSlider = false
volumeView.setRouteButtonImage(nil, for: .normal)
volumeView.translatesAutoresizingMaskIntoConstraints = false
volumeView.isHidden = true
if let airplayButton = volumeView.subviews.filter({$0 is UIButton }).first as? UIButton {
self.airplayButton = airplayButton
self.airplayButton?.addObserver(self, forKeyPath: "alpha", options: [.initial, .new], context: nil)
}
NotificationCenter.default.addObserver(self, selector: #selector(wirelessRouteActiveChanged), name: NSNotification.Name.MPVolumeViewWirelessRouteActiveDidChange, object: nil)
myView.addSubview(volumeView)
}
Run Code Online (Sandbox Code Playgroud)
还有其他人遇到过同样的问题吗?
编辑:
崩溃日志
Exception Type: EXC_CRASH (SIGTRAP)
Exception Codes: 0x0000000000000000, …Run Code Online (Sandbox Code Playgroud) 我在VOIP应用程序上工作.我使用Core Audio Audio Units播放和录制音频.我需要能够操纵音量和输出设备.我正在尝试使用MPVolumeView设置音量并选择输出设备.
我的问题是:当我开始使用(开始播放和捕获RemoteIO音频单元)音频单元时,似乎MPVolumeView不再控制我的会话音量,而是控制系统范围的声音首选项.同时,硬件按钮控制音频单元播放的声音音量.此外,当我开始使用音频单元MPVolumeView开始显示按钮来更改输出设备但在此之前它没有.
似乎MPVolumeView控制某些系统范围音频会话的音量,但是当我开始使用音频单元时,会创建另一个应用程序范围(甚至音频单元宽)音频会话并用于播放声音.
那么问题是如何为我的Core Audio音频会话制作MPVolumeView控制音量?
我会很感激为什么会发生这种情况.我几乎整天都在谷歌上搜索,我发现有些人有相关问题,但没有任何提示:(.如果需要,我也可以发布更多细节.
每次我MPVolumeView作为子视图添加到我UIViewController的视图中时,都会有一个快速动画(MPVolumeView从左到右展开),看起来非常奇怪.我正在寻找摆脱这个动画的方法,有人遇到过这个问题吗?
我差点接受这是一个MPVolumeView错误,但后来我注意到Apple肯定MPVolumeView在他们的原生音乐应用程序中使用了a ,那里没有奇怪的动画......所以一定有些东西我做错了.
更新:
代码非常简单,但是在评论中请求了,所以这里是:
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(10.f, 0.f, CGRectGetWidth(self.view.frame) - 20.f, 30.f)];
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumValueImage:[UIImage imageNamed:@"icon-volumeMin"]];
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumValueImage:[UIImage imageNamed:@"icon-volumeMax"]];
volumeView.center = CGPointMake(0.5f * CGRectGetWidth(self.view.frame), 0.5f * CGRectGetHeight(self.view.frame));
volumeView.showsRouteButton = NO;
[self.view addSubview:volumeView];
Run Code Online (Sandbox Code Playgroud)
我在github上做了一个非常简单的项目来解决问题,但你必须在设备上运行它,因为MPVolumeView它不会出现在模拟器上.或者只是看看这个gif:
:
我想设置Iphone Speaker默认值.我的音量控制快速代码如下.它工作正常,但当我点击airplay按钮时,我看到自动选择第二个.(Iphone)
var wrapperView = UIView(frame: CGRectMake(10,40,(self.view.bounds.size.width)-20, 20))
wrapperView.backgroundColor=UIColor.purpleColor()
self.view.addSubview(wrapperView)
var volumeView = MPVolumeView(frame: wrapperView.bounds)
volumeView.tintColor=UIColor.purpleColor()
wrapperView.addSubview(volumeView)
Run Code Online (Sandbox Code Playgroud)
这似乎是一个操作系统错误,但仍需要解决方法.
使用基于视图控制器的方向定位iOS 8或9,MPVolumeView即使其父视图控制器仅支持单个方向,路由列表也将始终旋转.
这可能导致系统进入错误的方向状态,其中视图控制器以纵向显示,但状态栏(和控制中心)是横向的.
创建了一个演示错误的测试项目:https://github.com/NextFaze/MPVolumeViewTest
我在Swift中创建了一个自定义视频播放器,AVPlayer并使用MPVolumeView了音量控制和AirPlay.视图初始化完美,但我遇到AirPlay按钮在内部消失的情况MPVolumeView.
加载视图时,MPVolumeView初始化没有问题
当用户选择使用AirPlay时,MPVolumeView移除音量滑块并仅显示AirPlay,这是预期的.
问题出现在用户关闭UIViewController然后再次打开它以播放另一个视频时.Airplay保持启用状态,这是预期的行为.当用户选择关闭AirPlay时,视频将返回到物理设备上播放,但AirPlay按钮会被隐藏.
我甚至试图showsRouteButton为我设置为true MPVolumeView,但这对此没有影响.在这种情况下,可能导致AirPlay按钮隐藏的原因是什么?只有在用户开始播放视频时启用AirPlay,然后关闭AirPlay时才会出现此问题.
今天,我将 iOS 升级到最新的 11.4。要设置系统音量,我使用以下方法。
-(void) setVolumeLevel:(float)val {
MPVolumeView *slide = [MPVolumeView new];
UISlider *volumeViewSlider;
for (UIView *view in [slide subviews]){
if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) {
volumeViewSlider = (UISlider *) view;
}
}
volumeViewSlider.value=val;
}
Run Code Online (Sandbox Code Playgroud)
但在 11.4 中,音量未设置。下面是我打印时的日志。请教一下,iOS 11.4下如何设置系统音量
<MPVolumeSlider: 0x1075bc3f0 dataSource: <MPVolumeControllerSystemDataSource: 0x1075be160 not available>
Run Code Online (Sandbox Code Playgroud) 使用MPVolumeView我想为应用程序的音频创建一个AirPlay输出按钮.
MPVolumeView *volumeView = [ [MPVolumeView alloc] initWithFrame:CGRectMake(20, 20, 220, 20)];
[volumeView setShowsVolumeSlider:NO];
[volumeView setShowsRouteButton:YES];
[volumeView sizeToFit];
[self.view addSubview:volumeView];
[volumeView release];
Run Code Online (Sandbox Code Playgroud)
错误/问题没有,但它没有出现,任何想法?
谢谢!
我的应用程序播放了一些声音,并且实现了AVRoutePickerView,因此它可以通过AirPlay或蓝牙流式传输声音。
一旦我点击AVRoutePickerView,上面的图像就会弹出,但是图像和标题错误。
图像和标题来自我之前玩过的Apple Music应用。
如何更改此元数据?
我试过配置MPNowPlayingInfoCenter时不走运。
let albumArt = MPMediaItemArtwork(boundsSize:CGSize(width: 50, height: 50)) { sz in
return UIImage(named: "MyImage")!
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "some title",
MPMediaItemPropertyArtist: "some artist",
MPMediaItemPropertyArtwork: albumArt]
Run Code Online (Sandbox Code Playgroud)
这就是我制作AVRoutePickerView的方式。
import AVKit
let routePickerView = AVRoutePickerView.init(frame: myFrame)
routePickerView.backgroundColor = UIColor.clear
routePickerView.tintColor = UIColor(named: someColor)
routePickerView.activeTintColor = UIColor(named: someColor)
soundController.contentView.addSubview(routePickerView)
Run Code Online (Sandbox Code Playgroud)
我的应用程序针对iOS11并在iPhone 6和iPhone 7上进行了测试。
请引导我以正确的方式。谢谢
mpvolumeview ×10
ios ×9
airplay ×4
objective-c ×3
swift ×3
audiounit ×1
avplayer ×1
core-audio ×1
ios11 ×1
ios7 ×1
iphone ×1
orientation ×1
speaker ×1
swift4 ×1
uikit ×1
volume ×1
xcode9-beta ×1