2017-04-22 1 views
0

사용 후 아래에있는 UIScrollView합니다 :앞으로 터치 이벤트 내가 아이폰 OS/스위프트의 터치 조작에 관한 질문이 그들에게

내 프로젝트는 수 있도록 OverlayView이의 상단에 낳는다이

UIViewController 
    → UIView 
      → OverlayView (UIView) 
      → ScrollView (UIScrollView) 

과 같은

UIScrollView. 둘 다 UIViewControllers 뷰의 하위 뷰입니다.

내가 이것을하고있는 이유는 스크롤 뷰가 정상적으로 작동 (패닝, 확대/축소)되고 오버레이 뷰가 스크롤 뷰의 가시적 인 내용의 변경에 영향을받지 않기를 바란다. 또한 오버레이보기는 터치 이벤트를 처리하여 아래 스크롤보기의 내용에 대한 지침을 표시해야합니다. 터치 이벤트 (touchesBegantouchesMoved, touchesEnded, touchesCancelled) 오버레이 뷰는 스크롤 뷰에 진행되지는 (스크롤 뷰가 이동하지 않습니다/줌) 것을

I가 지금 직면하고있어 문제.

point(inside point: CGPoint, with event: UIEvent?) -> Bool을 무시하고 false을 돌려서 터치 이벤트를 다음보기로 전달하는 해결책을 찾았습니다. 그러나 오버레이 뷰의 터치 이벤트는 호출되지 않습니다.

누구나이 동작을 구현하는 방법에 대해 알고 있습니까? 오버레이보기에서 다음 응답자의 모든 터치 이벤트를 호출하려고했지만이 방법도 작동하지 않았습니다.

귀하의 도움에 감사드립니다!

+0

Intstead를있는 UIScrollView의 하위 클래스를 생성하고이 접촉을 처리 – Darshana

+0

을 :

class PassThruOverlayView: UIView { override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { for v in subviews { let ptInSub = v.convert(point, from: v.superview) if v.bounds.contains(ptInSub) { return true } } return false } } 

당신은 (있는 ScrollView의 "중복 ScrollViews"와 "UIView의 오버레이를 모두 표시) 작업 예제를 여기에서 볼 수 있습니다. –

답변

0

가장 좋은 방법은 찾아 볼 것 hitTest (docs) - 당신은 내가 당신이 오른쪽에 있었다 생각

0

아래보기까지 터치 이벤트를 전달해야 할 때를 결정하는 하위 클래스 (오버레이)에 논리를 만들 point(inside point: CGPoint, with event: UIEvent?) -> Bool으로 추적하십시오.

"오버레이"보기에서 해당 점이 서브 뷰 내부에 있는지 확인하십시오. 그렇다면 true를 반환하여 하위 뷰와의 상호 작용을 허용합니다. 그렇지 않은 경우는 false를 돌려 「터치를 건네주세요」를 배후의 스크롤 뷰에 건네줍니다. ,있는 ScrollView에 대한 개요를 사용하는 https://github.com/DonMag/ScrollViewPassThru

+0

답장을 보내 주셔서 감사합니다! 문제는 오버레이보기와 스크롤보기에서 모두 터치 이벤트가 필요하다는 것입니다. -/ –

+0

흠 ... 그러니까 - 예를 들어 - 버튼을 오버레이보기에서 가져 와서 액션을 트리거하십시오. *** 및 *** 기본 스크롤 뷰에서 동일한 탭 트리거가 있습니다. – DonMag

+0

정확! 스크롤 뷰 내에서 일종의 드로잉 캔버스가 있으며 오버레이 뷰에서 정확한 드로잉을위한 가이드 라인을 삽입하려고합니다. 이 방법을 사용하는 이유는 스크롤 막대보기의 내용으로 확대되지 않도록 지침을 작성하기 위해서입니다. –