2016-12-02 7 views
3

나는 아래와 같이 UIImageView에 레이블이 있습니다.동시에 핀치, 끌기 및 팬

enter image description here

라벨은 드래그, 팬 수와 핀치 수 있습니다. 그러나 한 번에 하나의 제스처 만 할 수 있습니다. 예를 들어 Snapchat 및 Whatsapp의 이미지에있는 텍스트 에서처럼 꼬집는 동안 레이블을 드래그하려고합니다. 내 기능은 다음과 같습니다. 검색 할 때 맞춤 제스처 인식기를 만들어야한다고 생각하지만 어떻게해야할지 모르겠다. 사용자 지정 인식기를 만들지 않고도이를 수행 할 수있는 방법이 있습니까? Snapchat-like text on image

func handlePan(recognizer: UIPanGestureRecognizer) { 
    var translation = recognizer.translation(in: allview) 

    translation.x = max(translation.x, imageview.frame.minX - mylabel.frame.minX) 
    translation.x = min(translation.x, imageview.frame.maxX - mylabel.frame.maxX) 

    translation.y = max(translation.y, imageview.frame.minY - mylabel.frame.minY) 
    translation.y = min(translation.y, imageview.frame.maxY - mylabel.frame.maxY) 

    if let view = recognizer.view { 
     view.center = CGPoint(x:view.center.x + translation.x, 
           y:view.center.y + translation.y) 
    } 
    recognizer.setTranslation(CGPoint.zero , in: view) 
} 
func handlePinch(recognizer: UIPinchGestureRecognizer) { 
    if let view = recognizer.view as? UILabel { 
     let pinchScale: CGFloat = recognizer.scale 
     view.transform = view.transform.scaledBy(x: pinchScale, y: pinchScale) 
     recognizer.scale = 1.0 
    } 
} 
func handleRotate(recognizer: UIRotationGestureRecognizer) { 
    if let view = recognizer.view as? UILabel { 
     let rotation: CGFloat = recognizer.rotation 
     view.transform = view.transform.rotated(by: rotation) 
     recognizer.rotation = 0.0 
    } 
} 
+0

한 번에 두 개 이상의 제스처를 시도하는 것은 좋지 않은 디자인입니다. 일반 사용자가 기대하는 바를 고려하면 혼란스러워 보입니다. – dfd

+0

snapchat 또는 whatsapp (이미지의 텍스트) 에서처럼하고 싶습니다. –

답변

3

내가 해결을 제의 ViewController에 "UIGestureRecognizerDelegate"를 추가하여이하는 동안

는이 게시물의 도움을 얻었다. 이렇게하면 제스처를 동시에 사용할 수 있습니다. 사용자 지정 제스처를 만드는 것이 더 효과적 일 것이라고 확신하지만 이것은 또한 작업을 수행합니다. 또한

pinchRecognizer.delegate = self 
panRecognizer.delegate = self 
rotateRecognizer.delegate = self 

은 위임에 대한 functin를 추가하는 것을 잊지 마세요있는 viewDidLoad 기능에 코드의 세 줄을 추가;

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
}