0

这就是我目前的做法

- (IBAction)sliderDistanceChanged {
    CGFloat sliderPosition = self.sliderDistance.value;
    NSUInteger sliderIndex = [BGDistanceFilterStop indexForFilterEffect:sliderPosition];

    self.distanceFilterForCatalog = @([BGDistanceFilterStop numberValueOfDistance:sliderIndex]);
    //self.distanceFilterForCatalog= @(self.sliderDistance.value).roundWithForDistanceFilter;
    //[self.distanceFilter setTitle:self.distanceFilterForCatalog.distanceForm forState:UIControlStateNormal];
    [self.distanceFilter setTitle:[BGDistanceFilterStop stringValueOfDistance:sliderIndex] forState:UIControlStateNormal];

}
- (IBAction)SliderNoLongerTouched:(id)sender {
    CGFloat sliderIndex = [BGDistanceFilterStop sliderSnappedPosition:self.sliderDistance.value];
    self.sliderDistance.value=sliderIndex;
}

基本上它会检测 self.sliderDistance.value ,然后根据它在舍入后设置报告的值。

一旦用户不再触摸,我改变 self.sliderDistance.value 的位置

没事儿。

但是,我想在用户修改之前更改 self.sliderDistance.value。但是,它与 iOS 用于跟踪手的位置和滑块值的变量相同。

那么如何在不更改 self.sliderDistance.value 的情况下安排按钮捕捉到正确的位置?

4

2 回答 2

2

我假设这些操作中的每一个都与相关的 UISlider 相关联。第一个由 触发,valueChanged第二个由触发touchUpInside

在这种情况下,首先将您的签名更改为这些

- (IBAction)sliderDistanceChanged:(UISlider*)sender;
- (IBAction)sliderNoLongerTouched:(UISlider*)sender;

这样您就可以使用sender而不是self.sliderDistance(更简单,更独立)来引用滑块。

调整sliderDistanceChanged

    - (IBAction)sliderDistanceChanged:(UISlider*)sender;
          //allocate the raw slider value to a variable
          CGFloat rawValue = sender.value; 

          //calculate the snapped value
          CGFloat snappedValue = [BGDistanceFilterStop sliderSnappedPosition:sender.value];

          //snap the slider in position
          sender.value = snappedValue;


         //now do the rest of your processing 
         //using rawValue if you want the raw value, 
         //snappedValue if you want the snapped value

       }

简化sliderNoLongerTouched

 - (IBAction)sliderNoLongerTouched:(id)sender {
    sender.value = [BGDistanceFilterStop sliderSnappedPosition:sender.value];
}           

(你现在实际上不需要这个,因为值在 中就位sliderDistanceChanged

于 2013-02-18T12:48:50.773 回答
0

在此处输入图像描述

(IBAction)sliderDistanceChanged {
    CGFloat sliderPosition = self.sliderDistance.value;
    NSUInteger sliderIndex = [BGDistanceFilterStop indexForFilterEffect:sliderPosition];

    self.distanceFilterForCatalog = @([BGDistanceFilterStop numberValueOfDistance:sliderIndex]);
    //self.distanceFilterForCatalog= @(self.sliderDistance.value).roundWithForDistanceFilter;
    //[self.distanceFilter setTitle:self.distanceFilterForCatalog.distanceForm forState:UIControlStateNormal];
    [self.distanceFilter setTitle:[BGDistanceFilterStop stringValueOfDistance:sliderIndex] forState:UIControlStateNormal];

}
- (IBAction)SliderNoLongerTouched:(id)sender {
    CGFloat sliderIndex = [BGDistanceFilterStop sliderSnappedPosition:self.sliderDistance.value];
    self.sliderDistance.value=sliderIndex;
}

基本上它会检测self.sliderDistance.value并在舍入后根据该值设置报告值。

一旦用户不再触摸,我改变位置self.sliderDistance.value

没事儿。

于 2017-02-20T19:18:21.000 回答