2013-09-29 56 views
5

我設計的iOS 7的音樂應用程序,我想直接把「AirPlay的」路由選擇器按鈕,在我的應用程序。我能夠將按鈕放置得很好,但它不會顯示,因爲圖標是白色的,我的背景是白色的。MPVolumeView路線按鈕的iOS改色7

有沒有辦法來改變路線按鈕的顏色?

這裏是我使用創建按鈕的代碼。

self.airPlayButton = [[MPVolumeView alloc] initWithFrame:CGRectZero]; 
    self.airPlayButton.showsVolumeSlider = NO; 
    [self.airPlayButton sizeToFit]; 
    self.airPlayButton.backgroundColor = [UIColor myGreenColor]; 
    [self addSubview:self.airPlayButton]; 

基本上下面的圖片是我想要的,除了我想圖標綠色,而不是它的背景。

MPVolumeView Route Button with background changed

回答

5

創建自己的形象,嘗試 setRouteButtonImage:forState: 按鈕圖像分配到指定的控制狀態。

- (void)setRouteButtonImage:(UIImage *)image forState:(UIControlState)state 
Parameters 
image 
The image to associate with the specified states. 
state 
The control state with which to associate the image. 
Discussion 
Use this to customize the appearance of the route button when it is enabled, disabled, highlighted, and so on. 

Availability 
Available in iOS 6.0 and later. 
See Also 
– routeButtonImageForState: 
Declared In 
MPVolumeView.h 
+0

這個伎倆!原來是相當簡單的解決方案,謝謝你指點我正確的解決方案! – jrwagz

6

要擴大lanbo's answer,你還可以得到路由按鈕的原始圖像和創建使用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) 
    } 
+0

它的工作原理可以確定,最後一個視圖是圖像? – Karsten

+0

不,沒有保證,但'if let'子句確保它不是'UIButton'就是安全的。 –

+0

爲什麼是volumeView.routeButtonImageForState(UIControlState.Normal)?。imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate);不工作? –

6

審查亞當斯回答我喜歡這項工作更清晰。所以,我的安全守衛的代碼位:

的Objective-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屬性的反應,如果蘋果決定添加其他按鈕或更改此代碼的序列仍將工作。

+0

這對我來說非常合適!我眼中最好的解決方案!謝謝! – funkenstrahlen