Сенсорные события, передаваемые в суперпредставление через прозрачные секции - PullRequest
3 голосов
/ 20 июля 2011

У меня есть простое приложение, которое добавляет подпредставление поверх основного представления, когда пользователь нажимает кнопку UIB в главном представлении. Это подпредставление имеет размер 480x320 (я в альбомном режиме), но в этом подпредставлении есть граница вокруг центрального изображения, которое является прозрачным.

Здесь моя проблема. Я хотел бы, чтобы только подпредставление обрабатывало прикосновения, пока оно не будет удалено из суперпредставления, но если на прозрачной границе есть событие прикосновения, оно передается суперпредставлению и игнорирует подпредставление, даже если подпредставление является полноразмерным окна.

Проводя некоторые исследования в этом направлении, кажется, что именно это и должно было случиться с яблоком, поскольку прикосновения будут передаваться только в непрозрачные секции, даже если подпредставление имеет полный размер окна. Это объясняется в ссылке:

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html

Я бы хотел установить его так, чтобы касания оставались с подпредставлением, независимо от каких-либо проблем с прозрачностью. HitTest: withEvent: метод, кажется, делает что-то вроде этого, но больше для передачи прикосновений к различным подпредставлениям, чем к тому, который был затронут.

Есть ли кто-нибудь, у кого есть исправление / обходной путь, который может достичь этого?

Ответы [ 3 ]

5 голосов
/ 31 июля 2011

Простое решение - создать подкласс для вашего подпредставления и добавить следующий пустой метод ...

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
}

Это предотвратит передачу касания в суперпредставление, даже если пользователь коснется прозрачной части.зрения.

2 голосов
/ 20 августа 2011

Вы должны просто положить кнопку очистки на задней части XIB. Это предотвратит срабатывание сенсорных событий.

1 голос
/ 20 июля 2011

Если вы сделаете скрытым backgroundColor вашего подпредставления, вы получите тот же эффект (прозрачная рамка вокруг UIButton), и ваше представление получит прикосновения:

Вы можете выполнить этот код непосредственно перед добавлением подпредставления:

subview.backgroundColor = [UIColor clearColor];
subview.hidden = NO;
[parentView addSubview:subview];
...