Игнорировать событие касания и позволить представлению под ним обрабатывать касание?

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

Когда пользователь щелкает прозрачную область (я могу построить прозрачную область без альфа-информации), я хочу, чтобы представление (тот же класс) под прозрачной областью обнаруживало прикосновение.

Моя стратегия состоит в том, чтобы позволить представлению игнорировать прикосновение, когда пользователь касается прозрачной области, и надеяться, что представление под ним автоматически поймает событие касания. Но я не уверен, что это сработает. (настройка вещей для проверки займет некоторое время)

Должен ли я использовать другой подход или описанная выше стратегия сработает?

Спасибо.


person eugene    schedule 25.12.2010    source источник


Ответы (1)


Попробуйте перезаписать метод hitTest:withEvent: в супервизоре. Вы можете заставить hitTest:withEvent: возвращать представление, которое вы хотите обрабатывать для данного события.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    for (UIView *v in self.subviews){
        CGPoint pointInB = [v convertPoint:point fromView:self];
        if ([v someConditionYouMayWantToTestFor]){
            return v;
        }
    }
    return nil;
}

В методе someConditionYouMayWantToTestFor вы проверяете, хотите ли вы, чтобы подпредставление захватило событие или нет.

person fsaint    schedule 25.12.2010
comment
ах Спасибо. будут ли подпредставления сортироваться в правильном порядке? самый вид сначала в итерации? - person eugene; 25.12.2010
comment
Я вижу, что одно касание на экране вызывает вызов hitTest 3 раза. Интересно, мой код испорчен или это ожидаемое поведение? - person eugene; 26.12.2010