使用 UISlider 作为 UISwitch(两个状态对象)

Posted

技术标签:

【中文标题】使用 UISlider 作为 UISwitch(两个状态对象)【英文标题】:Using UISlider as UISwitch (Two state object) 【发布时间】:2012-01-03 18:04:01 【问题描述】:

注意:我使用的是 Monotouch。

我想知道是否有办法将UISlider 对象用作UISwitch 对象。我的意思是...我只想在两种状态(100% 或 0%)中使用 UISlider 对象,并且我想阻止其他状态进行用户交互。

我正在尝试这样做,因为我正在开发一个软件,它将控制某些模块的照明。问题是有调光模块(0% 到 100%)和非调光模块(0% 或 100% 值),我需要 UISlider 在第二种情况下正常工作。

UISwitch 的问题在于它在视觉上是一个完全不同的组件,它不像滑块那么薄,我不能放置代表 ON 和 OFF 状态的图标(在它旁边,如附图中所示),我想知道也许 UI 会被滑块和开关弄得一团糟……

【问题讨论】:

您是否希望滑块为空表示关闭,满表示打开?你是让他们滑动还是点击? 第一个问题:完全正确。第二个问题:也许只是点击去另一个状态(我认为这更容易)。 【参考方案1】:

您可以设置UISlider 的目标/操作并以编程方式将其强制设置为极端之一。

我将continuous 设置为NO,然后将滑块设置为动画到更近的一端(让用户更清楚正在发生的事情)。

编辑: 根据您的问题,这是一种为值设置动画的典型机制:

UISlider *slider;
[UIView animateWithDuration:0.2 // seconds
                 animations:^
                   slider.value = (YES) ? 1.0 : 0.0; // modify this line as appropriate
                 ];

【讨论】:

你知道我该怎么做这个动画吗?它是在对象库中完成的吗? 回复回复:使用+[UIView animateWithDuration:animations:]【参考方案2】:

如果您使用 IB,您可以设置滑块的最小值和最大值,因此请分别使用 0 和 1。或者你可以在代码中完成,见下文:

看here

或从该帖子中复制和粘贴:

UISlider* slider = [[UISlider alloc] init];
slider.minimumValue = -3.0f;
slider.maximumValue = 3.0f;

它是一个浮点值,因此是 3.0f loat

【讨论】:

不会只是扩展规模吗?我的意思是它不使用整数,因此您的滑块将返回 0 到 1 之间的值范围。我认为他希望使其对齐到 0 或 1。 好点,但我认为你可以向上或向下舍入它,如果你以编程方式进行它应该可以工作。但我没有尝试过,也许不可能。但是我没有看到任何其他方法来实现这一点,除了可能提前知道需要什么,然后根据情况加载滑块或开关。 我只是在讨论 UISlider 对象的功能。否则,对于用户交互,我将执行以下操作:超过 50%(发送命令打开),小于 50%(发送命令关闭)。 当您这样做时,也将滑块值设置为 1 或 0,这样它实际上看起来就像在整个滑动过程中一样【参考方案3】:

我认为您希望滑块捕捉到 0 或 1。使用找到的代码 in this *** question 并适当地设置您的值。有趣的巧合,不到 10 分钟前,我刚刚完成了自己为捕捉滑块编写的代码。为了节省点击,这里是你想要的代码,从那个问题复制/粘贴:

-(IBAction)valueChanged:(id)sender 
    // This determines which "step" the slider should be on. Here we're taking 
    //   the current position of the slider and dividing by the `self.stepValue`
    //   to determine approximately which step we are on. Then we round to get to
    //   find which step we are closest to.
    float newStep = roundf((questionSlider.value) / self.stepValue);

    // Convert "steps" back to the context of the sliders values.
    self.questionSlider.value = newStep * self.stepValue;

【讨论】:

以上是关于使用 UISlider 作为 UISwitch(两个状态对象)的主要内容,如果未能解决你的问题,请参考以下文章

UISlider的基本使用方法

在 Swift 中:如何使用 uislider 值作为变量来设置旋转速度

Swift - UISlider 作为视频洗涤器的平滑度问题

将 UIImage 作为“刻度线”添加到 UISlider

调用 didSelectRowAtIndexPath 时激活单元格的附属视图 (UISwitch)

UIslider 控件作为 iTunes