2017-11-09 13 views
0

파단의 알 수없는 수의 제스처 인식기를 설정하는 방법 : 순간다음과 같이 내가 <code>UIGestureRecognizerDelegate</code>을 준수하고 팬 제스처를 설정 한 나는 <code>mainCanvasView</code>라는 기본보기를

let panGesture = UIPanGestureRecognizer(target: self, action:#selector(self.handlePanGesture(gesture:))) 
    self.mainCanvasView.addGestureRecognizer(panGesture) 


    func handlePanGesture(gesture: UIPanGestureRecognizer) { 
     if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed{ 
      let translation = gesture.translation(in: view) 
      gesture.view?.transform = (gesture.view?.transform)!.translatedBy(x: translation.x, y: translation.y) 
      gesture.setTranslation(CGPoint(x: 0, y: 0), in: view) 
     } 
    } 

을의 결과는 다음과 같습니다

내 목표는 mainCanvasView를 이동하는 아니라, 이후의 서브 뷰는 사용자가 mainCanvasView에 추가 할 수있다. 나는 이 아니고에 추가 된 모든 새로운 서브 뷰에 팬 제스처를 추가해서는 안된다는 것을 알고 있습니다. 내 mainCanvasView에서 제스처가 패닝 한 최상위 하위 뷰를 어떻게 감지 할 수 있습니까? 현재 작동하지 않는 것에

일러스트 예 : 서브 뷰는 주요 컨테이너보기의 경계 밖으로 이동하는 경우

enter image description here

답변

1

당신은 제스처는 모든 하위 뷰에 어떤 제스처 그것에 일 수 없습니다해야하기 때문이다. 하위 뷰로 추가 할 때 기본 뷰 전체 높이와 앞에 만들거나 각 하위 뷰에 제스처를 추가하십시오. 나는 그레이 컬러 기본보기 흰색 뷰를 생성 한 코드를 게시하고 여전히

여기

것은 당신이 팬 중에 접촉 된 서브 뷰를 찾을 수 있습니다 필요한 것은 내 솔루션

입니다 그것의 서브 뷰입니다 내가

func handlePanGesture(gesture: UIPanGestureRecognizer) { 

    if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed { 

     var viewNew = UIView(frame: view.frame) 

     for view in self.viewMain.subviews { 
      let point = gesture.location(in: view) 
      if (view.hitTest(point, with: nil) != nil) { 
       viewNew = view 
       break 

      } else { 
       print("Not Tapped") 
      } 
     } 

     print("View Tapped") 


     let translation = gesture.translation(in: view) 
     viewNew.transform = (viewNew.transform).translatedBy(x: translation.x, y: translation.y) 
     gesture.setTranslation(CGPoint(x: 0, y: 0), in: viewNew) 




    } 
} 
(당신이 영상이있는 경우 사용자 상호 작용을 가능하게해야합니다) 3 개 하위 뷰를 포함하는 하나의 기본보기를 생성 한 제스처

내가 만든 데모

enter image description here

+0

이것은 훌륭한 해결책입니다! 빠른 질문 : 기본 캔버스보기가 추가 된 2 개 이상의 하위보기가있는 경우 팬 동작은 손가락이 움직이는 위치의 하위보기를 모두 이동합니다. 나는 당신의 코드를 수정하려고했다. 1. 다른 모든 뷰의 맨 위로 이동 된 서브 뷰를 이동시킨다. 많은 성공을 거두지 못했습니다. 어떤 통찰력이라도 대단히 감사합니다 - 감사합니다. – daspianist

+1

새로운 답변에 새로운 해결책이 추가되었습니다. –

관련 문제