iOS如何使滑块停在离散点

gon*_*ins 42 iphone slider uislider ios

我想在一个代表时间轴上整数的离散点上制作一个滑块.最好的方法是什么?我不希望它们之间有任何价值.如果滑块可以"捕捉"到每个离散点的位置,那将是很好的.

Nat*_*ies 66

我在这里采取的步骤与jrturton的答案中所述的步骤非常相似,但我发现滑块会明显落后于我的动作.我是这样做的:

将滑块放入Interface Builder中的视图中.设置滑块的最小/最大值.(我使用0和5)

在.h文件中:

@property (strong, nonatomic) IBOutlet UISlider *mySlider;
- (IBAction)sliderChanged:(id)sender;
Run Code Online (Sandbox Code Playgroud)

在.m文件中:

- (IBAction)sliderChanged:(id)sender 
{
    int sliderValue;
    sliderValue = lroundf(mySlider.value);
    [mySlider setValue:sliderValue animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

在Interface Builder之后,我将滑块的"Touch Up Inside"事件连接到File的所有者,而不是"Value Changed".现在它允许我平滑地移动滑块并在我的手指抬起时捕捉到每个整数.

谢谢@jrturton!

更新 - 斯威夫特:

@IBOutlet var mySlider: UISlider!

@IBAction func sliderMoved(sender: UISlider) {
    sender.setValue(Float(lroundf(mySlider.value)), animated: true)
}
Run Code Online (Sandbox Code Playgroud)

此外,如果在故事板中挂钩事情有任何困惑,我已经向github上传了一个快速示例:https://github.com/nathandries/StickySlider

  • 不错,但它会圆了下来.lroundf将舍入到最接近的整数. (2认同)
  • 我还会用'Touch Up Outside' (2认同)

jrt*_*ton 40

要使滑块"粘贴"在特定点,您的viewcontroller应在从滑块链接到的valueChanged方法中,从滑块的值确定适当的圆角,然后使用setValue:animated:将滑块移动到适当的位置.因此,如果滑块从0变为2,并且用户将其更改为0.75,则假设此值应为1并将滑块值设置为该值.

  • 正如Nathan在下面所说,使用'Touch up inside',因为如果使用valueChanged,它会在拖动时闪烁 (7认同)

ctl*_*key 6

我为此做的是首先将当前滑块值的"输出"变量设置为整数(默认情况下为浮点数).然后将输出编号设置为滑块的当前值:

int output = (int)mySlider.value;
mySlider.value = output;
Run Code Online (Sandbox Code Playgroud)

这将使其设置为以1整数为增量移动.要使其在特定数字范围内移动(例如,在5秒内),请使用以下公式修改输出值.在上面的前两行之间添加:

int output = (int)mySlider.value;
int newValue = 5 * floor((output/5)+0.5);
mySlider.value = newValue;
Run Code Online (Sandbox Code Playgroud)

现在,当您移动滑块时,滑块会"跳跃"到5的倍数.