Тройной UISwitch - PullRequest
       14

Тройной UISwitch

4 голосов
/ 27 января 2010

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

Ответы [ 4 ]

10 голосов
/ 27 января 2010

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

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

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

4 голосов
/ 27 января 2010

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

4 голосов
/ 27 января 2010

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

0 голосов
/ 01 апреля 2012

Использование 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];
}
...