Отслеживание касания в суперпредставлении - это правильно, я считаю. Но я бы предпочел провести тестирование в суперпредставлении, а не публиковать уведомление на контроллере представления. Примерно так:
Создайте класс MYAnimationContainerView
(синее поле).
Дайте ему обратный вызов делегата или блока, который устанавливает контроллер представления. Например:
__weak id weakSelf = self;
MYAnimationContainerView *view = [[MYAnimationContainerView alloc] initWithTouchCallback:^(UIView *touchedView){
[weakSelf handleTouchToView:touchedView];
}];
В MYAnimationContainerView
переопределите значения touchesBegan:withEvent:
и touchesEnded:withEvent:
. В began
выполните проверку попадания на уровне представления движущихся видов. Следите за тем, какой из них (если есть) был затронут. В ended
выполните еще один тест на попадание. Если это тот же самый вид, тогда перезвоните.
Вышесказанное можно легко реализовать с помощью протокола delegate
, а не блока. Я просто привык к тому, что блоки предпочтительнее протоколов делегатов с одним методом.
Вы также можете реализовать его с помощью target / selector, но этот паттерн стал немного сложным с ARC , и я склонен препятствовать его использованию сегодня.