2013-09-29 9 views
5

Ich entwerfe eine Musik-App für iOS 7 und möchte die "AirPlay" -Routenauswahl direkt in meine App einfügen. Ich bin in der Lage, den Knopf in Ordnung zu bekommen, aber es wird nicht angezeigt, weil das Symbol weiß ist und mein Hintergrund weiß ist.Farbe der MPVolumeView Route ändern Schaltfläche iOS 7

Gibt es eine Möglichkeit, die Farbe des Route Buttons zu ändern?

Hier ist der Code, den ich verwende, um die Schaltfläche zu erstellen.

Grundsätzlich ist das Bild unten was ich will, außer ich möchte das Symbol grün statt nur es ist Hintergrund.

MPVolumeView Route Button with background changed

Antwort

5

Ihr eigenes Bild erstellen und versuchen setRouteButtonImage: forState: Ordnet eine Schaltfläche Bild auf die angegebenen Steuerzustände.

- (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

Das hat den Trick! Hat sich als ganz einfache Lösung erwiesen, danke, dass Sie mich auf die richtige Lösung hingewiesen haben! – jrwagz

6

erweitern auf lanbo's answer, können Sie auch das ursprüngliche Bild der Schaltfläche Route erhalten und eine Kopie erstellen, die den UIImageRenderingMode.AlwaysTemplate Rendering-Modus verwendet. So beachtet es die aktuelle tintColor.

In Swift:

let volumeView = MPVolumeView() 

    if let routeButton = volumeView.subviews.last as? UIButton, 
     let routeButtonTemplateImage = routeButton.currentImage?.imageWithRenderingMode(.AlwaysTemplate) 
    { 
     volumeView.setRouteButtonImage(routeButtonTemplateImage, forState: .Normal) 
    } 
+0

Es funktioniert, aber ist es sicher, dass die letzte Ansicht das Bild ist? – Karsten

+0

Nein, es gibt keine Garantie, aber die 'if let'-Klausel stellt sicher, dass es sicher ist, wenn es kein' UIButton' ist. –

+0

Warum ist volumeView.routeButtonImageForState (UIControlState.Normal) ?. imageWithRenderingMode (UIImageRenderingMode.AlwaysTemplate); funktioniert nicht? –

6

bei der Überprüfung Adams Antwort mag ich mehr Klarheit in dieser Aufgabe. Also ich sicher bewacht, der Code ein wenig:

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; 
    } 
} 

Swift:

for view in volumeView.subviews { 
     if view.isKindOfClass(UIButton) { 
      let buttonOnVolumeView : UIButton = view as! UIButton 
      volumeView.setRouteButtonImage(buttonOnVolumeView.currentImage?.imageWithRenderingMode(.AlwaysTemplate), forState: .Normal) 
      break; 
     } 
    } 

Jetzt reagiert es auf dem tintColor Eigenschaft Volume und wenn Apple entscheidet, eine neue hinzufügen oder ändern Sie die Reihenfolge, in der dieser Code noch funktioniert.

+0

Das hat perfekt für mich funktioniert! Beste Lösung in meinen Augen! Vielen Dank! – funkenstrahlen

Verwandte Themen