2014-01-24 5 views
-2

У меня есть ситуации, когда я должен работать вокруг ошибки в iOS7 и нужно преобразовать UIButton управления события:Возможно преобразование управляющих событий UIButton в UIGestureRecognizer?

UIControlEventTouchUpOutside UIControlEventTouchDown UIControlEventTouchUpInside UIControlEventTouchDragOutside UIControlEventTouchDragInside UIControlEventTouchDragInside

к UIGestureRecgonizer (я могу» t используйте UIView методы касания, такие как touchesBegan, touchesEnded и т. д.). Я заинтересован, если это вообще возможно.

Например, я думаю о способе конвертировать UIControlEventTouchDown и не может думать о способе. UITapGestureRecognizer и UIPanGestureRecognizer оба не работают.

Кто-нибудь знает, возможно ли это?

ответ

1

Я сделал что-то подобное с UILongPressGestureRecognizer для игры SpriteKit, чтобы реализовать пересечение сегмента линии, уверен, что он легко адаптируется для имитации UIButton. Следите за предыдущим местоположением распознавателя жестов, я просто использовал статический CGPoint, который я обновлял каждый раз, когда мой селектор запускал. Затем просто проверьте предыдущую позицию и текущую позицию с помощью CGRectContainsPoint, используя рамку вашей кнопки, и в зависимости от этих результатов сделайте все, что вам нужно. Если оба находятся внутри фрейма, это то же самое, что и UIControlEventDragInside, если оба находятся снаружи, это UIControlEventDragOutside, если предыдущий внешний и текущий находится внутри, это UIControlEventDragEnter и т. Д. Также убедитесь, что вы проверяете состояние распознавателя жестов, чтобы вы знали когда звонить TouchUpInside/Outside. Я бы удостоверился, что у меня есть все основания для этого, но это кажется мне пригодным.

+0

Да, это точно, поместите мой код в ответ ниже. –

0
- (void) longPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer 
{ 
    if (longPressGestureRecognizer.state == UIGestureRecognizerStateBegan || longPressGestureRecognizer.state == UIGestureRecognizerStateChanged) 
    { 

     CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self]; 

     if (CGRectContainsPoint(self.bounds, touchedPoint)) 
     { 
      [self addHighlights]; 
     } 
     else 
     { 
      [self removeHighlights]; 
     } 
    } 
    else if (longPressGestureRecognizer.state == UIGestureRecognizerStateEnded) 
    { 
     if (self.highlightView.superview) 
     { 
      [self removeHighlights]; 
     } 

     CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self]; 

     if (CGRectContainsPoint(self.bounds, touchedPoint)) 
     { 
      if ([self.delegate respondsToSelector:@selector(buttonViewDidTouchUpInside:)]) 
      { 
       [self.delegate buttonViewDidTouchUpInside:self]; 
      } 
     } 
    } 
} 
Смежные вопросы