2010-03-09 3 views
1

У меня есть очень простой подкласс UIButton, который запустит пользовательское событие, когда кнопка удерживается в течение 2 секунд. Для достижения этой цели, я отменяю:continueTrackingWithTouch: withEvent: не вызывается непрерывно

// 
// Mouse tracking 
// 
- (BOOL)beginTrackingWithTouch:(UITouch *)touch 
        withEvent:(UIEvent *)event 
{ 
    [super beginTrackingWithTouch:touch withEvent:event]; 
    [self setTimeButtonPressed:[NSDate date]]; 

    return (YES); 
} 

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    [super continueTrackingWithTouch:touch withEvent:event]; 
    if ([[self timeButtonPressed] timeIntervalSinceNow] > 2.0) 
    { 
     // 
     // disable the button. This will eventually fire the event 
     // but this is just stubbed to act as a break point area. 
     // 
     [self setEnabled:NO]; 
     [self setSelected:NO]; 
    } 

    return (YES); 
} 

Моей проблема (это в симуляторе, не может делать на работе устройства совсем еще) «continueTrackingWithTouch: withEvent:» не вызывается, если мышь не будет перемещена , Это не требует большого движения, но это требует некоторого движения.

Возвращая «ДА» в обоих из них, я должен быть настроен для приема непрерывных событий. Это странность симулятора, или я делаю что-то неправильно?

ПРИМЕЧАНИЕ: для параметра userInteractionEnabled установлено значение YES.

NOTE2: Я мог бы установить таймер в beginTrackingWithTouch: withEvent: но это похоже на большее усилие для чего-то, что должно быть простым.

ответ

2

Поведение, которое вы описываете, является предполагаемым поведением. Отслеживание - это только отслеживание движения.

Чтобы проверить продолжительность касания, я бы предложил запустить таймер в beginTrackingWithTouch, который запускает событие через 2 секунды, и тестовый пример в endTrackingWithTouch, который отменяет таймер.

Смежные вопросы