如何反转 UISlider 的最小值-最大值?

Posted

技术标签:

【中文标题】如何反转 UISlider 的最小值-最大值?【英文标题】:How do I reverse UISlider's min-max values? 【发布时间】:2013-02-15 01:03:32 【问题描述】:

有没有反转 UISlider 值的好方法?默认值是左侧的最小值和右侧的最大值。我希望它以相反的方式工作。

将其旋转 180 度似乎有点傻。有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

只需从最大值中减去您从滑块中获得的值,这将使值反转。

【讨论】:

嗯,减去“最大值”,而不是“1” @borrrden,是的,我会更新——我假设默认比例为 0 到 1。 FI:如果您的最小值为 0.5,最大值为 1.5。选择的值是x,y是它的倒数,那么x+y=2。因此,您可以像这样计算反向:y=2−x 如果您的最小值不为零,则此答案会给出不正确的结果。请参阅我的answer below,它适用于非零滑块范围。 试试这个 - yourSlider.semanticContentAttribute = .forceRightToLeft 你会得到正确的最小-最大颜色。【参考方案2】:

然后我需要和你完全相同的东西……所以将它再旋转 90 度,使其处于倒置位置。滑块是对称的,所以它在两个位置看起来完全一样。但是现在最小值和最大值正好相反。

命令是...

mySlider.transform = CGAffineTransformRotate(mySlider.transform, 180.0/180*M_PI);

【讨论】:

那个180 / 180就是1可以删除吗?你不知道弧度?也需要垂直镜像滑块:slider.transform = slider.transform.scaledBy(x: 1, y: -1).【参考方案3】:

子类 NSSlider/UISlider。因此覆盖这两个方法 -

//Assumes minValue not necessarily 0.0

-(double)doubleValue


    double minVal = [self minValue];
    double maxVal = [self maxValue];

    double curValue = [super doubleValue];
    double reverseVal = maxVal - curValue + minVal;
    return reverseVal;


-(void)setDoubleValue:(double)aDouble


    double minVal = [self minValue];
    double maxVal = [self maxValue];

    double reverseVal = maxVal - aDouble + minVal;

    [super setDoubleValue:reverseVal];

这将反转允许右/上显示为最小值和左/下显示为最大值的值

【讨论】:

【参考方案4】:

接受的答案不正确,因为它假定滑块的最小值为 0。

在我的例子中,我的最小值是 1.1,最大值是 8.0

您需要从 Min+Max 值中减去滑块的值以反转该值。

【讨论】:

【参考方案5】:

您可以使用以下公式:

let sliderValue = yourSlider.minimumValue + yourSlider.maximumValue - yourSlider.value

会颠倒你的价值观。

【讨论】:

【参考方案6】:

试试这条漂亮的线 -

yourSlider.semanticContentAttribute = .forceRightToLeft

这会改变最小-最大轨道颜色+反转值+您不会像转换答案那样丢失帧。

【讨论】:

【参考方案7】:

只需从最大值中减去滑块当前值。

label.text = [NSString stringWithFormat:@" %.f%% ", 100 - self.slider.value];

【讨论】:

您的回答节省了我的时间。谢谢【参考方案8】:

您可以简单地使用 transform (Swift 5.0) 水平翻转滑块:

slider.transform = CGAffineTransform(scaleX: -1, y: 1);

【讨论】:

【参考方案9】:

这个怎么样:

slider.maximumValue = -minimumValue;
slider.minimumValue = -maximumValue;


-(void) sliderChanged:(UISlider *) slider 

      float value =  -slider.value;

      // do something with value


然后只需使用 -slider.value。

【讨论】:

以上是关于如何反转 UISlider 的最小值-最大值?的主要内容,如果未能解决你的问题,请参考以下文章

在运行时更改 UISlider 的最小值和最大值

偏移 UISlider 最小值/最大值图像

将手势识别器添加到 UISlider 最小值/最大值图像

如何增加 UISlider 的最大轨道的大小?

UISlider - 将 UILabel 添加到最小/最大 UIImageView?

当滑块按钮超过最大值的 60% 时,UISlider 最大轨道图像使用最小轨道图像