#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; }