三重 UI 切换

发布于 2024-08-19 16:37:46 字数 38 浏览 8 评论 0原文

我想创建一个具有三个位置的自定义 UISwtich。是否可以?

I want to create a custom UISwtich with three positions. Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你是我的挚爱i 2024-08-26 16:37:46

如果您想要标准 UI 元素或配置范围为 2 的 UISlider,则应该使用 UISegmentedControl

slider.minimumValue = 0; 
slider.maximumValue = 2;
slider.continuous = NO;

然后设置 minimumValueImagemaximumTrackImagethumbImage 使用适当的图像。

You should be using UISegmentedControlif you want a standard UI-Element or configure a UISlider with a range of 2:

slider.minimumValue = 0; 
slider.maximumValue = 2;
slider.continuous = NO;

And then set the minimumValueImage, maximumTrackImage and thumbImage to use appropriate images.

半暖夏伤 2024-08-26 16:37:46

不使用内置的 UISwitch。你需要自己动手。

Not using the built-in UISwitch. You'll need to roll your own.

歌入人心 2024-08-26 16:37:46

为什么不使用 UISegmentedControl?

Why not use a UISegmentedControl?

梦回旧景 2024-08-26 16:37:46

使用 UISlider 是一个很好的方法。但您还需要调整 UISlider 的机制,使其更像 UISwitch。即,当您不完全改变其位置时,它应该弹回到原始位置。

这就是我最终所做的(使用 FelixLam 答案的一部分):

UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(screenRect.size.width*0.5-width/2, screenRect.size.height*0.95-height, width, height)];

slider.minimumValue = 0; 
slider.maximumValue = 2;
slider.continuous = NO;
slider.value = 1;

[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];

随着......

- (void)sliderAction:(UISlider *)slider {
    float origValue = slider.value;
    [UIView beginAnimations:nil context:NULL];
    if (slider.value<1.9 && slider.value>0.1) slider.value=1;
    else if (slider.value>1.9) slider.value=2;
    else slider.value=0;
    [UIView setAnimationDuration:0.2*fabs(slider.value-origValue)];
    [UIView commitAnimations];
}

Using UISlider is a good approach. But you would additionally want to adjust the mechanics of your UISlider to be more UISwitch-like. I.e., when you change its position incompletely then it should bounce back to the home position.

Here's what I ended up doing (using a part of FelixLam's answer):

UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(screenRect.size.width*0.5-width/2, screenRect.size.height*0.95-height, width, height)];

slider.minimumValue = 0; 
slider.maximumValue = 2;
slider.continuous = NO;
slider.value = 1;

[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];

Along with...

- (void)sliderAction:(UISlider *)slider {
    float origValue = slider.value;
    [UIView beginAnimations:nil context:NULL];
    if (slider.value<1.9 && slider.value>0.1) slider.value=1;
    else if (slider.value>1.9) slider.value=2;
    else slider.value=0;
    [UIView setAnimationDuration:0.2*fabs(slider.value-origValue)];
    [UIView commitAnimations];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文