1

mainCanvasView이라는 주 뷰에 나타날 수있는 하위 뷰의 알 수없는 번호가 있습니다. 사용자가이 서브 뷰상단 서브 뷰에만 팬 제스처를 감지하고 적용하는 방법

  1. 감지 하위 뷰에 팬 제스처를 만들고, 적용 팬 애니메이션 변환 그 서브 뷰 만mainCanvasView
  2. 위에 해당 하위 뷰를 가져올 때 내 목표는이다

는 지금, 나는 다음과 같은 짓을 : 지프 볼 수 있듯이

//Added a pan gesture hanlder to mainCanvasView 
let panGesture = UIPanGestureRecognizer(target: self, action:#selector(self.handlePanGesture(gesture:))) 
self.mainCanvasView.addGestureRecognizer(panGesture) 

//Define the method for handling gestures 
func handlePanGesture(gesture: UIPanGestureRecognizer) { 
    if gesture.state == UIGestureRecognizerState.began || gesture.state == UIGestureRecognizerState.changed { 
     var appliedView = UIView(frame: view.frame) 
     viewLooper: for view in self.mainCanvasView.subviews { 
      let point = gesture.location(in: view) 
      if (view.hitTest(point, with: nil) != nil) { //Find the view that the finger interacted with 
       appliedView = view 
       break viewLooper 
      } 
     } 

     self.mainCanvasView.bringSubview(toFront: appliedView) 
     let translation = gesture.translation(in: view) 
     appliedView.transform = (appliedView.transform).translatedBy(x: translation.x, y: translation.y) 
     gesture.setTranslation(CGPoint(x: 0, y: 0), in: appliedView) 
    } 
} 

을 INDIVI을 이동하면서 하위보기가 약간 겹치면 두 가지 하위보기가 이동되는 이상한 효과가 발생합니다.

이 문제를 해결할 수있는 방법에 대한 권장 사항은 대단히 감사하겠습니다.

enter image description here

+0

UIView에 태그를 설정하고 동작 방식 gesture.view에서 가져 오기? .tag – karthikeyan

+0

'exclusiveTouch' 사용해보기 - https://developer.apple.com/documentation/uikit/uiview/1622453-exclusivetouch – Amit

답변

1

UIView 객체

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for view in self.viewMain.subviews { 

     if let point = touches.first?.location(in: self.view) { 

      if let viewTouched = self.view.hitTest(point, with: event),viewTouched == view { 
       viewNew = view 
       viewNew.center = point 
       self.viewMain.bringSubview(toFront: view) 
       print("Tapped") 
       break 
      } else { 
       print("Not Tapped") 
      } 

     } 
    } 

} 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 

    if let point = touches.first?.location(in: self.viewMain) { 
     viewNew.center = point 
    } 

} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    viewNew = UIView() 
} 

viewNew 글로벌 인 내가 touch 방법

을 사용했다

더 나은 솔루션을 (당신이 여기에 자신의 향상된 기능을 추가 할 수 있습니다) 여기 팬 제스처를 제거

희망 당신에게 도움이

+0

위대한 기능을 수행했습니다. 감사합니다 존! – daspianist

0

확인 다음 프로젝트 당신이 원하는 얻을 수있는

사용 출력 - 핀치 및 이미지 뷰에 제스처를 누르고 터치에 이미지를 처리하는 모든 화면

Link - https://github.com/RockinGarg/Moving-views-.git 

을 통해 이미지를 이동

import UIKit 

class objectClass: UIImageView, UIGestureRecognizerDelegate { 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
       let touch: UITouch = touches.first! 
     self.center = touch.location(in: self.superview) 

    } 

} 

기타 제스처 기능

//recognizing gestures 
func recognizePinchGesture(sender: UIPinchGestureRecognizer) { 
    sender.view!.transform = sender.view!.transform.scaledBy(x: sender.scale, y: sender.scale) 
    sender.scale = 1 
} 

func recognizeRotateGesture(sender: UIRotationGestureRecognizer) { 
    sender.view!.transform = sender.view!.transform.rotated(by: sender.rotation) 
    sender.rotation = 0 
}