обнаружить прикосновение к виду за другим видом? - PullRequest
6 голосов
/ 02 августа 2011

У меня два представления

  • вид сверху имеет непрозрачные и прозрачные области
  • вид снизу имеет несколько нажимаемых кнопок.

Вид сверху полностью покрывает вид снизу, но, поскольку вид сверху имеет прозрачные области, вид снизу все еще виден.

НО, я больше не могу обнаружить нажатия кнопок на виде снизу, так как вид сверху блокирует его, что мне делать?

Есть ли способ, чтобы вид сверху передавал касания в вид снизу?

Ответы [ 3 ]

4 голосов
/ 15 сентября 2011

Мое решение для моего собственного вопроса, надеюсь, оно кому-нибудь поможет.

На виде спереди послушайте touchesEnded:withEvent делегата.

Когда этот делегат срабатывает, вы знаете, что пользователь касается вида спереди.

Далее необходимо проверить, касается ли положение пальца особых областей на нижнем виде.

Что делать, это:

1) Преобразовать точку относительно вида снизу:

UITouch *touch = [touches anyObject];
CGPoint touchPointInLowerView = [touch locationInView:self.lowerViewController.view];
BOOL isLowerButtonClicked = [self.lowerViewController isFingerOnYourButton:touchPointInLowerView];
if(isLowerButtonClicked)
{
 // lower button clicked
}

2) В нижнем представлении

- (BOOL) isFingerOnYourButton:(CGPoint)point
{
 return CGRectContainsPoint(self.aButton.frame, point);
}  

вуаля. Таким образом, мы можем обнаружить щелчки в виде снизу, даже если он заблокирован другим интерактивным видом сверху.

1 голос
/ 02 августа 2011

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

В противном случае лучше всего переопределить pointInside:withEvent: или hitTest:withEvent: в классе вида сверху. Если вид сверху и вид снизу являются родственными, достаточно вернуть NO из pointInside:withEvent:; если они далее разделены в иерархии представлений, вам может потребоваться переопределить hitTest:withEvent:, чтобы явно вернуть нижний вид для прозрачных областей.

1 голос
/ 02 августа 2011

Отключить взаимодействие с пользователем на виде сверху, который блокирует вид внизу:

topView.userInteractionEnabled = NO;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...