Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 三联开关_Iphone_Cocoa Touch_Uiswitch - Fatal编程技术网

Iphone 三联开关

Iphone 三联开关,iphone,cocoa-touch,uiswitch,Iphone,Cocoa Touch,Uiswitch,我想创建一个具有三个位置的自定义UISwtich。是否可能?不使用内置UI开关。您需要自己启动。为什么不使用UISegmentedControl?如果您想要标准UI元素或配置范围为2的UISlider,您应该使用UISegmentedControl: slider.minimumValue = 0; slider.maximumValue = 2; slider.continuous = NO; 然后设置minimumValueImage、maximumTrackImage和thumbIma

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

不使用内置UI开关。您需要自己启动。

为什么不使用UISegmentedControl?

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

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

然后设置
minimumValueImage
maximumTrackImage
thumbImage
以使用适当的图像。

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

以下是我最后做的事情(使用FelixLam的部分答案):

连同

- (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];
}
-(void)滑块动作:(UISlider*)滑块{
float origValue=slider.value;
[UIView beginAnimations:nil上下文:NULL];
如果(slider.value0.1)slider.value=1;
如果(slider.value>1.9)slider.value=2;
else滑块。值=0;
[UIView设置动画持续时间:0.2*fabs(滑块值或值)];
[UIView委员会];
}

使用UISegmentedControl是个好主意!UISlider的问题是你必须触球才能改变球的价值,而这种体验并不是很好。我想我会使用UISegmentedControl,谢谢!
- (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];
}