2014-01-23 14 views
6

Ich versuche, eine zusätzliche UIView über dem Daumen in einem UISlider zu zentrieren. Um dies zu tun, brauche ich die Breite des Daumenbildes. In iOS6 funktioniert das gut. Ich kann verwenden:So lesen Sie die Größe des UISlider thumb image

CGFloat thumbWidth = self.navSlider.currentThumbImage.size.width; 

(Wie es in dieser Antwort gesehen: How to get the center of the thumb image of UISlider)

Das gibt 0.0f in iOS7. Ich habe auch versucht, es zu lesen mit:

UIImage *thumb = [self.navSlider thumbImageForState:UIControlStateNormal]; 

Aber Daumen endet nil.

Ist es möglich, die Größe des Standard-Slider-Thumb Image zu lesen? Oder muss ich es finden, eine Konstante setzen und wie Apple es später nicht ändert?

Antwort

6

Die docs auf der currentThumbImage Eigenschaft sagen:

Wenn keine benutzerdefinierten Daumen Bilder mit der setThumbImage eingestellt wurden: forState: Methode, diese Eigenschaft enthält den Wert Null. In dieser Situation verwendet der Empfänger das Standard-Thumb Image für Zeichnung.

Die docs auf thumbImageForState: sind weniger klar:

Rückgabewert Der Daumen Bild mit dem angegebenen Zustand zugeordnet, oder Null, wenn ein geeignetes Bild konnte nicht abgerufen werden.

Ich denke, Sie könnten Pech haben, versuchen, die Standard-Daumengröße herauszufinden. Wie wäre es mit der Installation eines "benutzerdefinierten" Thumb Image, das genau wie das Systembild aussieht? Das würde das Problem lösen, dass Apple es unter euch austauscht.

+1

Ich habe gehofft, diese Bilder ohne Gewohnheit zu tun, aber ich denke, dies ist der einzige Weg sein kann. Zumindest wird es über Betriebssysteme hinweg einheitlich aussehen. Vielen Dank! –

0

Sie müssen das initiale Daumenbild mit setThumbImage forState festlegen. Das funktioniert für mich in iOS7 und gibt die richtige Breite des Bildes zurück. Der Slider wird in einem Storyboard eingerichtet und über ein IBOutlet verbunden.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.slider setThumbImage:[UIImage imageNamed:@"tick.jpg"] forState:UIControlStateNormal]; 

    float check = self.slider.currentThumbImage.size.width; 
    NSLog(@"Check is %f", check); 

} 
+0

Ich hatte gehofft, dies zu tun, ohne benutzerdefinierte Bilder für den Slider bereitzustellen. Das ist vielleicht der einzige Weg, um das zum Laufen zu bringen. –

6

ich dies in meiner Unterklasse:

CGRect trackRect = [self trackRectForBounds:self.bounds]; 
CGRect thumbRect = [self thumbRectForBounds:self.bounds trackRect:trackRect value:0]; 
CGSize thumbSize = thumbRect.size; 
+1

Intelligente Antwort. Allerdings können wir immer noch die Größe oder die Rekt des Daumens ohne Unterklasse erhalten: 'var trackRect = slider.trackRectForBounds (slider.bounds) var thumbRect = slider.thumbRectForBounds (slider.bounds, trackRect: trackRect, Wert: slider .value) ' Verwenden Sie' slider? .superview.convertRect (thumbRect, fromView: slider) ', um es in der Superview-Koordinate zu verwenden. – bubuxu

+0

Es ist so toll! –

Verwandte Themen