iOS обнаруживает перетаскивание остановлено

Супер простой вопрос, на котором я в тупике:

Я использую UISlider, который должен определять, когда пользователь перетаскивает ползунок (но не нажимает). Это работает, и большой палец, очевидно, можно перетаскивать, но мне нужно получать уведомления, когда событие перетаскивания останавливается. Есть ли управляющее событие, которое я не вижу, которое позволит мне различать остановку перетаскивания и остановку касания?

Или есть простой способ сделать это в методе touchesEnded:?

Любая помощь приветствуется. Спасибо.


person The Kraken    schedule 27.04.2012    source источник


Ответы (3)


Использовать этот:

[slider addTarget:self action:@selector(slidingStopped:)forControlEvents:UIControlEventTouchUpInside];

- (void) slidingStopped:(id)sender
{
    NSLog(@"stopped sliding");
}
person Andy Davies    schedule 03.08.2012
comment
Я знаю, что это древнее, но это не полное. Вам также необходимо отправить сообщение для UIControlEventTouchUpOutside, иначе пользователь может провести пальцем за границы элемента управления, а затем отпустить, и вы не получите сообщение. - person FreaknBigPanda; 22.07.2013

Я знаю, что это старый пост, но вот что я сделал. Его можно адаптировать к задаче UISlider.

BOOL buttonDidMove = NO;

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self action:@selector(buttonMoved:withEvent:) forControlEvents:UIControlEventTouchDragInside];
    [button addTarget:self action:@selector(buttonTouchUpInside) forControlEvents: UIControlEventTouchUpInside];
    [button setTitle:@"Tap Me" forState:UIControlStateNormal];
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    button.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:button];
}

- (void)buttonTouchUpInside
{
    if (buttonDidMove) {
        buttonDidMove = NO;
        return;
    }
    NSLog(@"buttonTouchUpInside");
    [self initNetworkCommunication];
}

- (void)buttonMoved:(UIButton *)control withEvent:(UIEvent *)event
{
    NSLog(@"buttonMoved");
    buttonDidMove = YES;
    UITouch *touch = [[event touchesForView:control] anyObject];
    control.center = [touch locationInView:self.view];
}

Надеюсь это поможет.

person Chrisbot    schedule 25.09.2013

[ratingScale addTarget:self action:@selector(slideEnds:) forControlEvents:UIControlEventTouchDragInside];

где ratingScale будет вашим образцом UISLider, а slideEnds будет вашим селектором образца, который будет запущен для вышеуказанного события.

Критерий touchDragInside гарантирует, что селектор срабатывает только до тех пор, пока вы продолжаете перетаскивать. Он не срабатывает, если вы просто регистрируете нажатия на большой палец ползунка.

person Bourne    schedule 27.04.2012
comment
И как я могу определить, поднимается ли палец пользователя после перетаскивания или просто касания? - person The Kraken; 27.04.2012