2016-06-08 19 views
0

Ich verwende ein UISlider in meiner App, wo ich Max und Min Bild für Slider hinzufügen. Alles funktioniert gut, aber schauen Sie sich das Bild unten an. Wenn ich auf die Schaltfläche klicke, wird die Animation gestartet und die Werte auf dem Etikett ändern sich, aber die Animation auf dem Slider springt direkt auf 6, was Sie sehen können und das gleiche passiert, wenn der Slider den maximalen Wert (100) erreicht Farbe) verschwindet und das Label zeigt weiterhin Werte von 97..98..99..100. enter image description hereUISlider unerwünschtes Verhalten beim Animieren

Hier ist der Code-Schnipsel als Referenz:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIImage *sliderMinimum = [[UIImage imageNamed:@"slider_max"] stretchableImageWithLeftCapWidth:14 topCapHeight:0]; 
    [self.slider setMinimumTrackImage:sliderMinimum forState:UIControlStateNormal]; 
    UIImage *sliderMaximum = [[UIImage imageNamed:@"slider_min"] stretchableImageWithLeftCapWidth:14 topCapHeight:0]; 
    [self.slider setMaximumTrackImage:sliderMaximum forState:UIControlStateNormal]; 
} 

- (IBAction)btnClicked:(id)sender 
{ 
[self.slider setValue:0 animated:true]; 
[self setSliderValue:2]; 
} 

- (void)setSliderValue:(float)value 
{ 
[UIView animateWithDuration:0.2 animations:^{ 
    [self.slider setValue:value animated:true]; 
} completion:^(BOOL finished) { 
    self.lblSliderValue.text = [NSString stringWithFormat:@"%0.0f", self.slider.value]; 
    if (self.slider.value != self.slider.maximumValue) { 
     [self setSliderValue:value+1]; 
    } 
}]; 
} 
+0

Sie müssen erzwingen:

[slider addTarget:self action:@selector(roundValue:) forControlEvents:UIControlEventValueChanged]; 

Und in der Wertrunden Funktion den Wert eingestellt Aktualisieren der UI-Komponente ... setNeedsDisplay – Dominic

+0

@Dominic Wie stelle ich es und wo! Können Sie Ihre Lösung ausarbeiten plz – iDeveloper

+0

setzen Sie dies, nachdem Sie den Text ... [self.lblSliderValue setNeedsDisplay] – Dominic

Antwort

0

mit Try this:

- (void)roundValue{ 

    [slider setValue:((int)((slider.value + 0)/1) * 1) animated:NO]; 

    } 
+0

Kein Erfolg Kumpel! Wenn die Animation auf NO eingestellt ist, wird sie schneller ausgeführt. Wenn Its/Yes gesetzt ist, überspringt es die ersten 5 Werte und die letzten 5 Werte – iDeveloper

+0

Sie setzen den minimalen und maximalen Wert..das ist richtig .... bitte stellen Sie auch den Slider ein.value = 0; ... kann sein, nachdem ich diesen Wert eingestellt habe..es fängt bei 0 an 0 –

+0

ich habe den Wert auf 0 gesetzt. Und es beginnt mit 0 ohne Zweifel. Der Animationsteil überspringt den Takt 0-5 und springt direkt auf 6 und läuft glatt bis 95 und wieder gleich für die restlichen 5 Werte – iDeveloper