Вопрос по objective-c, uislider, xcode, ios, cocoa-touch – Обнаруживает прикосновения на UISlider?

12

У меня есть UISlider на экране, и я должен быть в состоянии определить, когда пользователь перестает прикасаться к нему. (так что я могу убрать некоторые элементы).

Я пытался с помощью:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

но это не сработало, когда заканчивались прикосновения к слайдеру.

Это отличное предложение! Я не знал, что вы могли бы использоватьUIControlEventTouchUpInside на UISlider, но это работает! :) Andrew Martin
Почему бы не использовать цель + действие сUIControlEventTouchUpInside илиUIControlEventTouchUpOutside? user529758

Ваш Ответ

3   ответа
19

когда касание заканчивается, используя два события управления; пытатьс

[slider addTarget:self action:@selector(touchEnded:) 
                       forControlEvents:UIControlEventTouchUpInside];
ил
[slider addTarget:self action:@selector(touchEnded:) 
                       forControlEvents:UIControlEventTouchUpOutside];

Если вы хотите обнаружить оба типаtouchesEnd событие, используйте

[slider addTarget:self action:@selector(touchEnded:) 
   forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
6

Вместо использованияtouchesEnded: (который не должен использоваться для этой цели в любом случае), прикрепите действие кUISlider sUIControlEventValueChanged событие и установитьcontinuous свойствоUISlider вNO, поэтому событие произойдет, когда пользователь закончит выбор значения.

mySlider.continuous = NO;
[mySlider addTarget:self
          action:@selector(myMethodThatFadesObjects) 
          forControlEvents:UIControlEventValueChanged];
Да, это тоже хорошее предложение. + 1. user529758
Это хорошая идея, но я уже использовалUIControlEventValueChanged чтобы получать живые обновления о том, где был UISlider, поэтому я не смог бы этого сделать, если я установлюcontinuous нет. Andrew Martin
То есть вы хотите получить значение в реальном времени, но применять его только тогда, когда пользователь перестает его касаться? Это должно было быть указано в вашем вопросе. Evan Mulawski
1

чтобы захватить начало и конец касаний, но после RTFD я придумал что-то, что будет делать и то, и другое.

  @IBAction func sliderAction(_ sender: UISlider, forEvent event: UIEvent) {

    if let touchEvent = event.allTouches?.first {
      switch touchEvent.phase {
      case .began:
        print("touches began")
        sliderTouchBegan()
      case .ended:
        print("touches ended")
        sliderTouchEnded()
      default:
        delegate?.sliderValueUpdated(sender.value)
      }
    }
  }

sliderTouchBegan() а такжеsliderTouchEnded() - это просто методы, которые я написал, которые обрабатывают анимацию, когда начинается касание и когда оно заканчивается. Если это не начало или конец, этоdefault и значение ползунка обновится.

Какой тип события управления вы используете для sliderAction ()? Это UIControlEvents.allTouchEvents? DeviOS
@ Hamed Когда вы вытаскиваете соединение из раскадровки, выполняете действие и в аргументах убедитесь, что вы указали событие отправителя AND (выделение шахты). Adrian

Похожие вопросы