«Hold» UIButton Behavior - «Состояние отмены касания», блокирующее дальнейшие состояния управления - PullRequest
1 голос
/ 15 февраля 2011

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

У меня есть кнопка, связанная с этим методом:

-(IBAction)peekToggle:(id)sendr{        

    NSLog(@"TOGGLE");

    if(self.view.alpha ==1)self.view.alpha = 0.1;   
    else self.view.alpha = 1;       
}

Через поведение: touch up inside, touch up outside и touch down. поэтому, когда я удерживаю кнопку нажатой, красное поле становится полупрозрачным, а когда я отпускаю палец, оно становится непрозрачным. Первоначально это работает нормально, однако, если я удерживаю кнопку нажатой более 1 секунды, кнопка не регистрирует touch up (отпускание пальца).

NB. У меня действительно есть longPressGestureRecogniser в родительском представлении (родительский элемент подпредставления не родительский для Button), но он не запускается (ожидается).

Я уверен, что мое долгое нажатие на кнопку было зарегистрировано как touch cancel, а затем аннулировало событие касания.

Как я могу предотвратить / обойти это?

Могу ли я остановить стрельбу touch Cancel? (это событие срабатывает, даже если я зарегистрировал состояние управления) или в событии touch Cancel скажите кнопке сохранить / начать регистрировать события?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

РЕШЕНИЕ:

Полностью удален IBActions и добавлен UILongPressGestureRecognizer к кнопке с очень короткой продолжительностью минут.

    UILongPressGestureRecognizer * recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];    
        recognizer.minimumPressDuration = 0.1;  
        [self.peekButton.view addGestureRecognizer:recognizer];
        [recognizer release];

Затем в селекторе для gr прочитайте состояние gr:

    - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer{ 

        //1 = start
        if(gestureRecognizer.state==1 || gestureRecognizer.state==3)[self peekToggle];
        //3=end
}
1 голос
/ 15 февраля 2011

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

1 голос
/ 15 февраля 2011

Если вы думаете, что это ваша проблема, вы можете попробовать переопределить - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event и посмотреть, есть ли у вас какие-либо действия там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...