更改 MPVolumeView 路由按钮 iOS 7 的颜色
Posted
技术标签:
【中文标题】更改 MPVolumeView 路由按钮 iOS 7 的颜色【英文标题】:Change Color of MPVolumeView Route Button iOS 7 【发布时间】:2013-09-29 07:04:14 【问题描述】:我正在为 ios 7 设计一个音乐应用程序,我想将“AirPlay”路由选择器按钮直接放在我的应用程序中。我可以很好地放置按钮,但是它没有显示,因为图标是白色的,我的背景是白色的。
有没有办法改变Route Button的颜色?
这是我用来创建按钮的代码。
self.airPlayButton = [[MPVolumeView alloc] initWithFrame:CGRectZero];
self.airPlayButton.showsVolumeSlider = NO;
[self.airPlayButton sizeToFit];
self.airPlayButton.backgroundColor = [UIColor myGreenColor];
[self addSubview:self.airPlayButton];
基本上下面的图片就是我想要的,除了我想要绿色的图标而不是它的背景。
【问题讨论】:
【参考方案1】:在查看 Adams 的答案时,我希望该任务更加清晰。所以我稍微保护了一下代码:
目标-C:
for( UIView *wnd in volumeView.subviews )
if( [wnd isKindOfClass:[UIButton class] ])
UIButton *button = (UIButton*) wnd;
UIImage *img = button.currentImage;
UIImage *img2 = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[volumeView setRouteButtonImage: img2 forState:UIControlStateNormal];
break;
斯威夫特:
for view in volumeView.subviews
if view.isKindOfClass(UIButton)
let buttonOnVolumeView : UIButton = view as! UIButton
volumeView.setRouteButtonImage(buttonOnVolumeView.currentImage?.imageWithRenderingMode(.AlwaysTemplate), forState: .Normal)
break;
现在它对 volumeView 的 tintColor 属性做出反应,如果 Apple 决定添加另一个按钮或更改顺序,此代码仍然可以工作。
【讨论】:
这对我来说非常有效!我眼中的最佳解决方案!谢谢! 有没有办法调整airplay按钮连接时的颜色?我已根据您的建议将色调更改为我的颜色,但连接后保持不变。【参考方案2】:要扩展lanbo's answer,您还可以获取Route Button 的原始图像并创建使用UIImageRenderingMode.AlwaysTemplate
渲染模式的副本。这样它就会注意到当前的tintColor
。
在斯威夫特中:
let volumeView = MPVolumeView()
if let routeButton = volumeView.subviews.last as? UIButton,
let routeButtonTemplateImage = routeButton.currentImage?.imageWithRenderingMode(.AlwaysTemplate)
volumeView.setRouteButtonImage(routeButtonTemplateImage, forState: .Normal)
【讨论】:
它有效,但确定最后一个视图是图像吗? 不,不能保证,但if let
子句确保它不是UIButton
时是安全的。
为什么是volumeView.routeButtonImageForState(UIControlState.Normal)?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate);不工作?【参考方案3】:
创建自己的图像并尝试 setRouteButtonImage:forState: 将按钮图像分配给指定的控件状态。
- (void)setRouteButtonImage:(UIImage *)image forState:(UIControlState)state
参数
image - 与指定状态关联的图像。
state - 与图像关联的控件状态。
讨论
使用它来自定义路由按钮在启用、禁用、突出显示等时的外观。
适用于 iOS 6.0 及更高版本。
【讨论】:
成功了!原来是一个非常简单的解决方案,感谢您为我指出正确的解决方案!以上是关于更改 MPVolumeView 路由按钮 iOS 7 的颜色的主要内容,如果未能解决你的问题,请参考以下文章