Проверка UICollectionView -> нормальное поведение

#ios #uiview #uicollectionview #uicollectionviewlayout #hittest

#iOS #uiview #uicollectionview #uicollectionviewlayout #проверка

Вопрос:

Я переопределил hitTest, и это работает просто отлично. Я хочу, чтобы он вел себя так, как если бы я не переопределял этот метод при определенных условиях, и в этом заключается проблема.

Я использую подкласс UICollectionView для рендеринга ячеек поверх a MKMapView с использованием пользовательской UICollectionViewLayout реализации. Мне нужно было переопределить hitTest в UICollectionView подклассе, чтобы события касания могли передаваться в MapView и его можно было прокручивать. Все работает нормально.

У меня есть механизм переключения, который анимирует между my UICollectionViewLayout (map) и a UICollectionViewFlowLayout (анимировать элементы на карте в формате сетки). Это тоже хорошо работает, но когда я показываю макет потока, я хочу, чтобы пользователь мог прокручивать UICollectionView его как обычный (действуйте так, как будто hitTest не переопределен). Я не могу понять, что нужно вернуть, hitTest чтобы иметь поведение по умолчанию.

 -(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    if(self.tapThrough == YES){
        NSArray *indexPaths = [self indexPathsForVisibleItems];
        for(NSIndexPath *indexPath in indexPaths){
            UICollectionViewCell *cell = [self cellForItemAtIndexPath:indexPath];
            if(CGRectContainsPoint(cell.frame, point)){
                return cell;
            }
        }
        return nil;
    } else {
        return ???
    }
}
  

Я пытался вернуть несколько вещей. self , self.superview , и т.д… Ничто не заставляет его вести себя нормально (я не могу прокручивать ячейки вверх и вниз).

Ответ №1:

Если вам нужно нормальное поведение вашего теста попадания:

 return [super hitTest:point withEvent:event];
  

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

Комментарии:

1. Вы правы. Я пробовал это, но в то же время я реализовал: — (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)GestureRecognizer{ return NO; }