使用 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(两个状态对象)的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中:如何使用 uislider 值作为变量来设置旋转速度
Swift - UISlider 作为视频洗涤器的平滑度问题