【问题标题】:UISlider unwanted behaviour while animatingUISlider 动画时不需要的行为
【发布时间】:2016-06-08 06:12:42
【问题描述】:

我在我的应用程序中使用 UISlider,为滑块添加最大和最小图像。一切都很好,但请看下面的图片。当我单击按钮时,动画开始并且标签上的值发生变化,但滑块上的动画直接跳转到 6,您可以看到它,当滑块从 96 滑块最小图像(橙色)达到最大值(100)时,也会发生同样的事情color) 消失,标签继续显示值 97..98..99..100.

这里是代码 sn-p 供参考:

 - (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];
    }
}];
}

【问题讨论】:

  • 您需要强制刷新 UI 组件... setNeedsDisplay
  • @Dominic 我如何设置它以及在哪里!你能详细说明你的解决方案吗?
  • 在你设置文本后放这个... [self.lblSliderValue setNeedsDisplay]
  • 我还建议包装你的 [self setSliderValue:value+1];行内: dispatch_async(dispatch_get_main_queue(), ^{ 你的代码在这里 });将下一个动画延迟到当前运行循环完成之后。
  • @Dominic 让我说清楚!标签在动画开始时显示完美值,即 1-100 我的概率是直接跳到 6 的滑块动画。您可以在我的问题中看到 gif 图像

标签: ios objective-c cocoa-touch uislider


【解决方案1】:

试试这个:

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

并在roundValue函数中设置值:

- (void)roundValue{

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

   }

【讨论】:

  • 没有成功,伙计!如果动画设置为 NO 它移动得更快。但如果它设置为 Yes/true 它会跳过前 5 个值和后 5 个值
  • 你设置了最小值和最大值..这是正确的....请同时设置slider.value = 0; ...可能在设置此值之后..它从 0 开始
  • 我已将值设置为 0。毫无疑问,它确实从 0 开始。动画部分跳过小节 0-5 直接跳到 6 并平稳地继续到 95 并且对于剩余的 5 个值再次相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多