2016-06-08 15 views
0

我在我的应用程序中使用UISlider,我添加滑块的最大和最小图像。每件事情都很好,但请看下面的图片。当我点击按钮时,动画开始,标签上的值发生变化,但滑块上的动画直接跳到6,您可以看到它,当滑块达到最大值(100)时,会发生同样的情况,滑块最小图像(橙色颜色)消失,标签继续显示值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

您需要强制刷新UI组件... 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

没有成功的队友!如果动画设置为NO,则它移动得更快。但是如果它的设置是/ true,它会跳过前5个值和最后5个值 – iDeveloper

+0

您设置了最小值和最大值..这是正确的....也请设置slider.value = 0; ...可能是在设置此值之后..从0 –

+0

开始,我已将值设置为0.并且确实从0开始。动画部分跳过0-5条并直接跳到6,然后顺利地继续直到95并且对于其余5个值再次相同 – iDeveloper