2017-11-14 24 views
1

나는 하위 클래스 인 UIGestureRecognizer를 추가 한 UIView이있는 상황에 있습니다. 다음 코드를 사용하고 있습니다.Subclassing UIGestureRecognizer 및 UILongPressGestureRecognizer

class ButtonGestureRecognizer: UIGestureRecognizer { 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) { 
    // 
    state = .began 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) { 
    // 
    state = .ended 
    } 
} 

이 날 출시 때 다시 정상 크기로 누를 때 나는 UIView 더 큰 확장 사용하고있는 "다운"터치 "가"터치 이벤트를 캡처 할 수 있습니다.

또한이보기에 UILongPressGestureRecognizer을 추가해야합니다.이보기에서는 누르고 있으면 확장되고 해제되면 일반 크기로 돌아가지만 다른 동작을 수행합니다.

그러나 서브 클래 싱 된 제스처 인식기는 UILongPressGestureRecognizer가 작동하지 못하게하는 것 같습니다. 내가 지금까지 찾은 유일한 해결책은 서브 클래 싱 된 제스처 인식기를 포기하고 UITapGestureRecognizer (최소 하나의 탭으로 설정해야 함) 및 UILongPressGestureRecognizer을 사용하는 것이지만 탭/프레스를 올바르게 감지하는 기능을 포기하고 끝 상태.

어쨌든 주위에? 감사!

답변

1

UIGestureRecognizerDelegate라는 프로토콜 그리고 그것은이 방법을 가지고

해당 프로토콜을 준수하고 그 방법에 true를 반환 할 수 있습니다 당신의 제스처 인식기 것, 당신의 인식기의 대리인으로 개체를 설정하면
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 

협력.

+2

제안 해 주셔서 감사합니다. 나는이 방법을 몰랐다. 'UIGestureRecognizerDelegate' 프로토콜을 준수하도록 내'UIView '를 설정하고, 참조 된 메소드를 추가하고,'UIView '를 위임자로 설정했습니다. 모든 설정이 완료되었습니다. – ZbadhabitZ