2013-03-04 3 views
0

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

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    circleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleHighlighted:)]; 
    [self addGestureRecognizer:circleTapRecognizer]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    CGPoint hit = [touch locationInView:self]; 

    if (gestureRecognizer == circleTapRecognizer) { 
     BOOL hitsCircle = hit.x >= CGRectGetMidX(self.bounds) - self.circleRadius && 
          hit.x <= CGRectGetMidX(self.bounds) + self.circleRadius && 
          hit.y >= CGRectGetMidY(self.bounds) - self.circleRadius && 
          hit.y <= CGRectGetMidY(self.bounds) + self.circleRadius; 

     return hitsCircle; 
    } 

    return YES; 
} 

Но я хочу, чтобы супервизор получал прикосновение, если кран был сделан на месте из этого круга. Как я могу это сделать? Конечно, я могу вызвать вызов метода делегата с именем tappedNotOnCircle, который вызовет логику супервизора, но мне интересно, есть ли более простой способ.

+0

рад видеть, что вы выбрали версию без GestureRecognizer. Держите вещи простыми. :) Не могли бы вы ответить, почему вы передумали? (Только для моего интереса) –

+0

@MarkKryzhanouski Потому что распознаватель жестов не работал. В один момент, когда метод в теме возвращал «НЕТ», распознаватели базовых представлений не вызывали и ничего не происходило. – efpies

ответ

1

Существует решение без GestureRecognizer. Просто переопределить - (BOOL) [UIView pointInside: (CGPoint) point withEvent: (UIEvent *) event].

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    BOOL hitsCircle = hit.x >= CGRectGetMidX(self.bounds) - self.circleRadius && 
         hit.x <= CGRectGetMidX(self.bounds) + self.circleRadius && 
         hit.y >= CGRectGetMidY(self.bounds) - self.circleRadius && 
         hit.y <= CGRectGetMidY(self.bounds) + self.circleRadius; 

    return hitsCircle; 
} 

Для лучшего понимания, пожалуйста, обратитесь к компании Apple документы Defining a Custom View

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