2

나는 hitTest를 오버로드했고, 정상적으로 작동합니다. 특정 조건에서이 방법을 재정의하지 않은 것처럼 행동하고 싶습니다. 문제가있는 곳입니다.UICollectionView hitTest -> 정상적인 동작

사용자 정의 UICollectionViewLayout 구현을 사용하여 MKMapView 이상의 셀을 렌더링하려면 하위 클래스 UICollectionView을 사용하고 있습니다. UICollectionView 하위 클래스에서 hitTest을 재정의해야 터치 이벤트를 mapView에 전달할 수 있고 스크롤 할 수 있습니다. 그건 모두 잘 작동합니다.

UICollectionViewLayout (지도)에서 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

당신은 당신의 적중 테스트의 정상적인 동작합니다 : 이것은 오버라이드 (override)하지 않을 때 적중 테스트는 일반적으로 반환 무엇을 반환합니다

return [super hitTest:point withEvent:event]; 

합니다.

+0

정확합니다. 나는 그것을 시도했지만 동시에 다음과 같이 구현했다. - (BOOL) gestureRecognizerShouldBegin : (UIGestureRecognizer *) gestureRecognizer { return NO; } – VaporwareWolf