2010-09-28 11 views
19

Ich habe viele Methoden versucht, ein reguläres UISlider zu implementieren und das Gerätevolumen zu steuern, aber es sind alle Native-C-Funktionen, die zu vielen unauffindbaren Fehlern führen.Wie wird MPVolumeView angepasst?

Ich habe versucht, die MPVolumeView es funktioniert wie Charme, es steuert sogar das Gerät Lautstärke auch nach dem Schließen der App, genau wie die iPod-App.

Meine Frage ist, gibt es sowieso die MPVolumeView mit bestimmten Farben und Bildern, wie UISlider?

HINWEIS: Ich möchte eine legale Methode ohne Verwendung von privaten undokumentierten APIs.

UPDATE
Per @Alexsander Akers Antwort, da die Unteransichten in MPVolumeView versteckt sind ich, um durch Subviews hatte, die UISlider bekommen und es anpassen, hier ist der Code.

+0

Gut gemacht. Netter Job, der deine Frage aktualisiert. –

+5

Nur aus Neugier, wurde das im App Store akzeptiert? – sooper

+0

@sooper sehr spät antworten, sorry. Leider habe ich diese App nicht fortgesetzt und sie nie im App Store eingereicht.Aber aus persönlicher Erfahrung habe ich viele Tutorials gesehen, wie man die ursprünglichen Komponenten modifizieren konnte und sie wurden akzeptiert. – medopal

Antwort

10

Sie könnten versuchen, durch seine Unteransichten zu fahren und nach einer UISlider-Unterklasse zu suchen?

+1

Am Ende ist das genau das, was ich verwendet habe. Nur aus Gründen der Klarheit werde ich die Frage mit dem Code aktualisieren. Ich hoffe Apple lehnt die App dafür nicht ab. – medopal

7

Seit iOS 5.0 Sie UIAppearance auf einem UISlider, auch wenn ein Teil MPVolumeView verwenden können.

überall in Ihrem Code-Basis:

[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_full.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal]; 
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_empty.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal]; 
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setThumbImage:[UIImage imageNamed:@"nowplaying_player_nob.png"] forState:UIControlStateNormal]; 

Hier ist eine Liste von einigen der anderen Klassen, die mit UIAppearance umgesetzt werden können: https://gist.github.com/mattt/5135521

+0

Nicht auf iOS 7 –

+0

Arbeiten unter iOS 8 perfekt! – Genevios

3

Es gibt nun Möglichkeiten, um dies zu erreichen, verwenden Sie einfach:

– setMaximumVolumeSliderImage:forState: 
– setMinimumVolumeSliderImage:forState: 
– setVolumeThumbImage:forState: 

Welche sind etwas andere Methodennamen als die für die Vanille UISlider.

Dies verhindert, dass Sie die Ansichten durchsehen müssen und möglicherweise in der Zukunft etwas kaputt gehen, wenn Apple die Dinge ändert.

0

Antwort in Swift:

func customSlider() { 
     let temp = mpVolView.subviews 
     for current in temp { 
      if current.isKind(of: UISlider.self) { 
       let tempSlider = current as! UISlider 
       tempSlider.minimumTrackTintColor = .yellow 
       tempSlider.maximumTrackTintColor = .blue 
      } 
     } 
    } 

Ergebnis:

enter image description here