iOS - как направить касания к основному uiview


1

У меня есть 3 UIView того же размера, уложенных друг на друга. Самый верхний прозрачный и используется только для обнаружения касаний. Тип обнаруженного касания определит, какой из двух следующих базовых представлений я хочу получать события касания. Как только верхний вид заканчивается прикосновением, мне нужно переслать события касания в правильное основное представление. Как я могу это сделать?

EDIT - Я добавляю свой код обнаружения касания. Это находится в MainViewController, чей вид содержит все 3 подзаголовка.

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

    for (UITouch *touch in touches) 
    { 
     if (touch.view == self.touchOverlay) { 
      CGPoint touchLocation = [touch locationInView:touch.view]; 

      //do a bunch of math to determine which view should get the touches. 
      if (viewAshouldGetTouches) //forward to viewA 
      if (viewBshouldGetTouches) //forward to viewB 


     } 
    } 
} 
  0

Все ли представления UIView в одном представлении? 01 фев. 132013-02-01 20:42:21

  0

@ Putz1103 Да, они являются подзонами одного вида. Я проверяю atthesMoved и т. Д. В контроллере представления, чем содержит представления. 01 фев. 132013-02-01 20:46:42

1

Вы должны будете сделать это, создав подкласс UIView для вида сверху и переопределения следующего метода:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    // UIView will be "transparent" for touch events if we return NO 
    return (point.y < MIDDLE_Y1 || point.y > MIDDLE_Y2); 
} 
  0

Но если я это сделаю, могу ли я по-прежнему проверять вид сверху на касания в touchhesMoved главного контроллера? Вот где я определяю, какой основной взгляд должен получить штрихи. 01 фев. 132013-02-01 20:45:44


3

Сделайте два подвиды setUserInteractionEnabled:NO и обрабатывать все штрихи в родителе. Затем, в зависимости от типа касания, отправьте правильный вид программному событию касания. Тогда вам не нужно четкое представление сверху. В основном вы будете координировать события касания снизу вверх, вместо того, чтобы идти вверх -> снизу -> посередине.

  0

Я добавил мой touchhesMoved метод выше. Можете ли вы привести пример того, как отправить одно из представлений программное событие касания из-под касаний? В принципе, два представления содержат прокрутки, которые необходимо прокручивать как обычно, если на просмотр поступают события касания. 01 фев. 132013-02-01 21:01:28

  0

Просто позвоните '[view1 touchhesBegan: касается с помощьюEvent: event];' изнутри touchhesbegan. Я не уверен, что scrollview будет работать правильно, но в моей голове это должно быть. 01 фев. 132013-02-01 21:30:55

  0

Мне нужен view1, чтобы получать прикосновенияМодулированные события, хотя и не касаютсяBegan. Вызов прикосновенийСозданный изнутри touchhesMoved, кажется, вызывает бесконечный цикл. 01 фев. 132013-02-01 21:45:53

  0

Ваш вызов «view1» [super touchesMoved ...]? Потому что это вызовет проблему. 01 фев. 132013-02-01 21:50:23

  0

нет, view1 не является подклассом. Это просто просмотр, который находится на экране, под видом наложения. 01 фев. 132013-02-01 21:59:19

  0

Да, тогда мой ответ - дерьмо. Вместо этого вы можете сделать свое «четкое» представление, чтобы проанализировать события касания, а затем познакомиться с его классом супервизора и вызвать события касаний в представлениях класса супервизора. Затем убедитесь, что setuserinteraction включен во всех представлениях. 02 фев. 132013-02-02 02:04:22

  0

Пробовал, что. touchhesMoved вызывается в контроллере представления, но scrollviews не получают события касания. 02 фев. 132013-02-02 22:06:00