UISlider - 类似UISwitch的机制

时间:2012-03-06 20:10:18

标签: objective-c algorithm

我正在尝试使用像UISwitch这样的UISlider,因为我可以自定义UISlider和东西。 我想完美地模仿UISwitch机制。

稍微改变一下公差,在拖动中间点后通过中间点改变。

我已经设置了一个UISlider,带有我想要的图像,min 0 max 1,默认0,连续属性OFF;在内部触摸时激发下面的方法。

我在下面编写了算法,但只有一件事它没有用。 将旋钮从一端拖动到另一端时,它会反弹回来。 (例如1.0到0.0)

你能帮我完善一下吗? 谢谢!

算法:

- (void)sliderChanged:(UISlider *)slider {

    [UIView animateWithDuration:0.2 animations:^{
        if ((slider.value >= 0.50 || slider.value == 0.0 || slider.value <= 0.10) && slider.value != 1.0) slider.value = 1.0;
        else if ((slider.value < 0.50 || slider.value == 1.0 || slider.value >= 0.90) && slider.value != 0.0) slider.value = 0.0;
    }];
}

2 个答案:

答案 0 :(得分:1)

你编程的逻辑是告诉它“反弹”

将其从1.0拖动到0.0:

[滑块值] = 0

你已经说过了: 如果值== 0且值!= 1则将值设置为1

与您的第二条逻辑路径相同 如果value == 1且value!= 0,则将值设置为0

- (void)sliderChanged:(UISlider *)slider {

    [UIView animateWithDuration:0.2 animations:^{
        if (slider.value >= 0.50) 
           slider.value = 1.0;
        else if (slider.value < 0.50)
           slider.value = 0.0;
    }];
}

另外,为什么你不想使用UISwitch?

答案 1 :(得分:0)

我一直在浏览UIKit并为我一直在努力的一些应用程序定制所有内容。我在UISwitch中找到的解决方案是基于UIControl

创建自己的解决方案

从那时起,我通过

处理拖拽

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

你也可以实现一个轻击手势,以便像原生开关那样轻敲开关。

我创建了自己的UIControl,因为我觉得我无法用UISlider实现那种“原生”的捕捉感觉。