UITapGestureRecognizer работает только для элементов, видимых на этапе инициализации - PullRequest
2 голосов
/ 25 августа 2010

Итак, я перебираю цикл и создаю UIView s, которые содержат UIImageView s (чтобы я мог выборочно показать любую заданную часть). Эти UIView все хранятся в UIScrollView.

Я добавляю распознаватели жестов к UIView в цикле, в котором я их создал.

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

Код инициализации:

UITapGestureRecognizer* gestRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
  gestRec.delegate = self;

  [imageholder addGestureRecognizer:gestRec];

Код, который относится к жесту:

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
 float count = [self._imageHolders count];
 NSLog(@"handling gesture: %f",count);
 while(count--){
  UIView* object = (UIView*) [self._imageHolders objectAtIndex:count];
 // NSLog(@"Whats going on: %@, %@, %b",object,gestureRecognizer.view, object == gestureRecognizer.view);
  if(object == gestureRecognizer.view){
   object.alpha = .1;
   count = 0;
  }
 // [object release];
 }
}

Есть идеи?

---- Обновление:

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

Я недостаточно знаю, как распознаватель жестов работает в архитектуре UIKit, чтобы понять эту проблему. Пример Apple для скролл-просмотра с жестами, похоже, не имеет этой проблемы, но я не могу найти никаких реальных отличий, кроме того, что я вкладываю свои UIImageViews в их собственные UIViews

Ответы [ 2 ]

5 голосов
/ 29 октября 2010

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

2 голосов
/ 06 июля 2011

Попробуйте установить для свойства cancelsTouchesInView значение NO.

UITapGestureRecognizer* gestRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
  gestRec.delegate = self;
  **gestRec.cancelsTouchesInView  = NO;**

  [imageholder addGestureRecognizer:gestRec];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...