2012-06-27 10 views
7

Ich baue eine Anwendung, die eine MPVolumeView benötigt, um das Volume zu steuern. Es funktionierte perfekt vor iOS 5.1, aber seit dem Update 5.1 ist das Daumenbild nicht mehr vertikal zentriert. Ich habe ein paar Dinge ausprobiert, wie zum Beispiel das Ändern von Imagemaßen, das Ändern der Größe meiner Ansichten (und des Sliders), aber nichts scheint zu funktionieren, der Daumen ist einfach nicht mehr vertikal zentriert. Die einzige Möglichkeit, einen zentrierten Daumen zu bekommen, ist, wenn ich den Standard-iOS-Modus verwende.Custom MPVolumeView Thumb Bild nicht vertikal zentriert seit iOS 5.1

Ich habe versucht, einen UISlider zu einer anderen Ansicht mit dem genauen Min-, Max- und Daumenbild hinzuzufügen, und dieses ist zentriert fein. Hier

ist der Code für das MPVolumeView:

MPVolumeView *volumeView; 
volumeView = [[[MPVolumeView alloc] initWithFrame:volumeViewHolder.bounds] autorelease]; 
[volumeViewHolder addSubview:volumeView]; 

UIView *volumeViewSlider; 
for (UIView *view in [volumeView subviews]) 
{ 
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) 
    { 
     volumeViewSlider = view; 
    } 
} 

[(UISlider *)volumeViewSlider setThumbImage:sliderHandleIcon forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMinimumTrackImage:leftTrackImage forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMaximumTrackImage:rightTrackImage forState:UIControlStateNormal]; 

volumeViewHolder ist nur ein UIView das ist 153x33. Ich lege den Daumen in den Screenshot in grün. enter image description here

+0

Ich hatte das gleiche Problem, [Daniel Amitay] (http://Stackoverflow.com/users/314042/daniel-amitay) wies mich auf die Lösung: http://tir.me/2012/07/14/ customizing-mpvolumeview-appearance/ – murze

+0

Das ist keine großartige Lösung, da es die MPVolumeSlider-Implementierung für alle MPVolumeSlider ersetzt. Dies verursacht einen Offset im MPMoviePlayerViewController-Schieberegler, den wir zum Abspielen anderer Medien verwenden. –

+0

@murze: Das ist ein Hack, wenn ich jemals einen gesehen habe! Wird dies von Apple akzeptiert? – Nailer

Antwort

4

Vielleicht eine bessere Lösung:

Benutzer ein größeres Bild mit einem transparenten Rand auf der Unterseite. Sollte für Retina Displays etwa 10 px betragen.

+0

Arbeitete wie ein Charme! –

0

das gleiche Problem, das ich in einem Projekt gelöst. Es muss eine Farbe für den linken Teil und den rechten Teil mit Alpha = 0 gesetzt werden. Das bedeutet, dass alle Schieber ohne Daumen (ohne bewegliche Teile) transparent sind. Danach müssen wir eine benutzerdefinierte Ansicht für die Schiebereglerlinie ohne Daumen erstellen. In dieser Ansicht kann jeder farbige Teil beliebig verschoben werden, oben oder unten, links oder rechts. Es wurde mit dem definierten y für Ihre Gelegenheit erhalten:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(x,y,width, height)]; 

Und fügen Sie den Schieberegler zu dieser Zeile als Unteransicht. Die Ergebnisansicht ist der Slider. Zum Beispiel:

UISlider *ourSlider = ...; 
//initialise UISlider 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

UIView *lineOfSliderWithoutThumb = ... ; 
// creation it 

[lineOfSliderWithoutThumb addSubview:ourSlider]; 

// danach lineOfSliderWithoutThumb ist unsere eigenen UISlider. Hinweis: Farben dort werden als Standard-Schieberegler Farben der linken und rechten Seite von UISlider verwendet.

+0

es für iOS 8 und iOS 7 zu – akr