Предайте външни разпознаватели, ако вътрешните не са получили докосването

Имам изглед и върху него програмно е начертан кръг. Също така имам разпознавател на жестове, който делегат проверява дали трябва да получи докосване (трябва, ако докосването е направено върху този кръг).

- (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, което ще извика логиката на superview, но се чудя дали има по-лесен начин.


person efpies    schedule 04.03.2013    source източник
comment
Радвам се да видя, че сте избрали версия без GestureRecognizer. Поддържайте нещата прости. :) Бихте ли отговорили защо променихте решението си? (Само за мой интерес)   -  person Mark Kryzhanouski    schedule 05.03.2013
comment
@MarkKryzhanouski Защото разпознаването на жестове не работи. В един момент, когато методът в темата върна NO, разпознавателите на основните изгледи не се обадиха и нищо не се случи.   -  person efpies    schedule 05.03.2013


Отговори (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 Дефиниране на персонализиран изглед

person Mark Kryzhanouski    schedule 04.03.2013