如何识别 UISlider 的运动是从最大值到最小值,反之亦然?

Posted

技术标签:

【中文标题】如何识别 UISlider 的运动是从最大值到最小值,反之亦然?【英文标题】:How to recognize the movement of the UISlider is from maximum to its minimum value and its Vice Versa? 【发布时间】:2014-06-24 11:56:41 【问题描述】:

我想知道如何识别 UISlider 正在从最大值跟踪到最小值? 例如,我的滑块最大值和最小值 1.0 和 0.0。如何识别我的滑块从 0.0 跟踪到 1.0,反之亦然?

谢谢!

【问题讨论】:

【参考方案1】:

有一个 UISlider 命名值改变的事件。使用该事件并计算差异。如果差异为正,则其趋向最大值,否则趋向最小值。使用下面的操作方法。

- (IBAction)sliderdidchanged:(UISlider *)sender 
    if (sliderOldValue - sender.value > 0) 
      NSLog(@"Value Decreasing");
    
    else 
     NSLog(@"Value Increasing");
    
    sliderOldValue = sender.value;

不要忘记在您的 xib 或 Storyboard 中的 UISlider 对象中引用此方法。还要将 sliderOldValue 声明为实例变量,并在 viewDidLoad 中将其值分配给滑块的默认值。

【讨论】:

谢谢,可以举例说明吗?【参考方案2】:

.h

跟踪最后一个值

@property(nonatomic,assign)    float lastValue;

.m

在 ViewDidLoad 中监听 UIControlEventValueChanged

[yourSlider addTarget:self
                action:@selector(mySliderValueChanged:)
      forControlEvents:UIControlEventValueChanged];

定义方法

- (IBAction)mySliderValueChanged:(UISlider *)sender 

    float currentValue = sender.value;

    if (currentValue>self.lastValue) 

        NSLog(@"moving Right");
    
    else

        NSLog(@"moving Left");
    

    self.lastValue = sender.value;

【讨论】:

它的工作,我的问题是,考虑我将我的滑块从 1.0 移动到 0.0,这意味着我正在传递值 0.9、.0.8、...、0.0,现在我将它从 0.0 移动到 1.0这意味着我传递了 0.0、0.2、...0.9、1.0,两个动作中的值相同,我该如何区分它?【参考方案3】:

可以监听ValueChanged控件事件

[slider_ addTarget:self action:@selector(sliderMove:) forControlEvents:UIControlEventValueChanged];

...

- (void) sliderMove:(UISlider*)slider

    if (slider.value == slider.minimumValue) 
        // etc...
    
    else if (slider.value == slider.maximumValue) 
        // so on and so forth
    

【讨论】:

好的,但是我想要一组函数在我从最大值跟踪到最小值时执行,另一组函数从最小值到最大值执行?我该怎么做?请指教?

以上是关于如何识别 UISlider 的运动是从最大值到最小值,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

拇指图像不会移动到 UISlider 的边缘

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