2017-02-16 1 views
0

특정 위치에 도달하면 하위 뷰를 드래그 앤 삭제하는 방법을 찾으려고합니다. 내가 지금까지 가지고있는 것은 몇 개의 하위 뷰를 추가하는 뷰 컨트롤러입니다. 내 하위 뷰 클래스는 회전 가능하고 크기를 재조정 할 수 있으며 뷰 컨트롤러에서 이동할 수 있습니다. 내가보기 컨트롤러의 상단 중앙에 하위 뷰를 이동하고 삭제하고 싶다고합시다. 부모보기 컨트롤러가 하위보기의 위치를 ​​알고 삭제를 수행하는 방법은 무엇입니까? 또 다른 문제는 모든 하위 뷰가 동일한 사용자 지정 클래스에서 생성된다는 것입니다. 어떤 하위 뷰를 삭제해야하는지 정의해야합니까? 미리 감사드립니다.특정 위치에서 삭제할 신속하게 하위 뷰 드래그

+0

[this] (https://github.com/antonio081014/TouchDemo)를 확인하십시오. 중복 된 WWDC 데모입니다. 도움이 될 것입니다. – antonio081014

+0

정말 고맙습니다. 나는 그것을 시도 할 것이다. – axel

답변

0

당신은 새로운 위치가 삭제 영역으로 이동합니다 있는지 확인하기 위해 CGRect.intersects을보기를 이동하려면 UIPanGestureRecognizer을 사용할 수 있습니다 (당신이 삭제 영역 내부에 완전히 것을 요구하려는 경우 대신 contains 사용) :

@IBAction func pan(_ recognizer: UIPanGestureRecognizer) { 
     let translation = recognizer.translation(in: self.view) 
     centerXConstraint.constant += translation.x 
     centerYConstraint.constant += translation.y 
     viewToMove.offset.x += translation.x 
     viewToMove.offset.y += translation.y 
     if viewToMove.frame.intersects(deletionRect) { 
      //Delete logic here 
     } else { 
      viewToMove.setNeedsDisplay() 
      recognizer.setTranslation(.zero, in: self.view) 
     } 

    } 

여러 뷰가있는 경우 UIView.tag 또는 Set 중 하나를 사용하여 어떤 뷰인지 파악할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 이 제스처는 서브 뷰 또는 컨트롤러에서 구현되어야합니다. 내 하위 클래스에 UIPanGestureRecognizer를 사용하기 때문에. – axel

+0

사실 나는 여전히 viewController에 구현하고 뷰 배열을 사용합니다. 이 경우 팬 제스처 인식기를 기본보기에 놓고 동작을 인식하면 배열을 검사하여 views.first {$ 0.frame.contains (point)}를 시작하여 처음 만난보기를 얻습니다. 이렇게하면 하위 클래스와 프로토콜이 필요 없습니다. –