2016-06-08 5 views
0

Я использую UISlider в своем приложении, где я добавляю максимальное и минимальное изображение для слайдера. Все работает хорошо, но посмотрите на изображение ниже. Когда я нажимаю кнопку, начинается анимация, а значения смены метки изменяются, но анимация на слайдере напрямую переходит на 6, которую вы можете видеть, и то же самое происходит, когда ползунок достигает максимального значения (100) из 96 минимального изображения слайдера (оранжевый цвет) исчезает, и метка продолжает показывать значения 97..98..99..100. enter image description hereUISlider нежелательное поведение во время анимации

Вот фрагмент кода для справки:

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

Вам нужно, чтобы заставить обновление компонента пользовательского интерфейса ... setNeedsDisplay – Dominic

+0

@ Dominic, как я его устанавливаю и где! Можете ли вы разработать свое решение plz – iDeveloper

+0

поместите это после того, как вы установите текст ... [self.lblSliderValue setNeedsDisplay] – Dominic

ответ

0

Попробуйте с этим:

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

И в функции roundValue установите значение:

- (void)roundValue{ 

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

    } 
+0

Нет успеха! если для анимации установлено значение НЕТ, она движется быстрее. Но если в его наборе Yes/true он пропускает первые 5 значений и последние 5 значений – iDeveloper

+0

Вы устанавливаете минимальное и максимальное значение. Это правильно .... пожалуйста, также установите slider.value = 0; ... может быть после установки этого значения .. начинать с 0 –

+0

Я установил значение 0. И он начинается с 0 без сомнения. Часть анимации пропускает полосу 0-5 и сразу переходит на 6 и продолжает плавно до 95 и снова одинаково для остальных 5 значений – iDeveloper

Смежные вопросы