2010-01-27 3 views
4

Я хочу создать пользовательский UISwtich с тремя позициями. Является ли это возможным?Triple UISwitch

ответ

10

Вы должны использовать UISegmentedControl, если вы хотите стандартный UI-элемент или настроить UISlider с диапазоном 2:

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

А затем установите minimumValueImage, maximumTrackImage и thumbImage использовать соответствующие изображения.

+0

Использование UISegmentedControl это отличная идея! Проблема с UISlider заключается в том, что вам нужно прикоснуться к мячу, чтобы изменить ценность, и опыт не так хорош. Я думаю, что буду использовать UISegmentedControl, спасибо! – arielcamus

4

Не использовать встроенный UISwitch. Вам нужно будет сворачивать самостоятельно.

4

Почему бы не использовать UISegmentedControl?

0

Использование UISlider - хороший подход. Но вы также хотели бы скорректировать механику вашего UISlider, чтобы быть более похожим на UISwitch. I.e., когда вы меняете свое положение не полностью, тогда он должен оправиться в исходное положение.

Вот что я в конечном итоге делает (используя часть ответа 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]; 
}