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
jrt*_*ton 40
要使滑块"粘贴"在特定点,您的viewcontroller应在从滑块链接到的valueChanged方法中,从滑块的值确定适当的圆角,然后使用setValue:animated:将滑块移动到适当的位置.因此,如果滑块从0变为2,并且用户将其更改为0.75,则假设此值应为1并将滑块值设置为该值.
我为此做的是首先将当前滑块值的"输出"变量设置为整数(默认情况下为浮点数).然后将输出编号设置为滑块的当前值:
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的倍数.