2016-12-11 4 views
0

동적으로 생성 된 레이블에 제스처를 추가하려고하지만이 코드는 작동하지 않지만 작동하지 않습니다. 무엇이 잘못 되었나요? 사전에동적으로 추가 된 UILabel에 제스처를 추가 할 수 없습니다.

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21)) 
label.center = CGPoint(x: 160, y: 285) 
label.textAlignment = .center 
label.text = field.text 
label.isZoomEnabled = true; 
label.minFontSize = 10; 
label.maxFontSize = 80; 
label.adjustsFontSizeToFitWidth = true; 
label.setNeedsLayout() 
label.isUserInteractionEnabled = true 
let panRecognizer = UITapGestureRecognizer(target: self, action:Selector(("handlePan:"))) 
let rotateRecognizer = UITapGestureRecognizer(target: self, action:Selector(("handleRotate:"))) 
panRecognizer.delegate = self 
rotateRecognizer.delegate = self 
label.addGestureRecognizer(panRecognizer) 
label.addGestureRecognizer(rotateRecognizer) 
self.view.addSubview(label); 
self.imagePicked.addSubview(label) 

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) { 
    let translation = recognizer.translation(in: self.view) 
    if let view = recognizer.view { 
     view.center = CGPoint(x:view.center.x + translation.x, 
           y:view.center.y + translation.y) 
    } 
    recognizer.setTranslation(CGPoint(x:0,y:0), in: self.view) 
} 

@IBAction func handleRotate(recognizer : UIRotationGestureRecognizer) { 
    if let view = recognizer.view { 
     view.transform = view.transform.rotated(by: recognizer.rotation) 
     recognizer.rotation = 0 
    } 
} 

감사합니다.

답변

0

당신은 UITapGestureRecognizer를 작성하지만 방법이 UIPanGestureRecognizerUIRotationGestureRecognizer을 복용했다 :이 문제를 해결하려면

가있는 UIImageView의 isUserInteractionEnabled 속성을 enbale. 또한 selector을 변경하여 메소드가 제대로 호출되도록하고 IBActions을 메소드로 변경했습니다.

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21)) 
    label.center = CGPoint(x: 160, y: 285) 
    label.textAlignment = .center 
    label.text = field.text 
    label.isZoomEnabled = true; 
    label.minFontSize = 10; 
    label.maxFontSize = 80; 
    label.adjustsFontSizeToFitWidth = true; 
    label.setNeedsLayout() 
    label.isUserInteractionEnabled = true 
    let panRecognizer = UIPanGestureRecognizer(target: self, action:#selector(self.handlePan)) 
    let rotateRecognizer = UIRotationGestureRecognizer(target: self, action:#selector(self.handleRotate)) 
    panRecognizer.delegate = self 
    rotateRecognizer.delegate = self 
    label.addGestureRecognizer(panRecognizer) 
    label.addGestureRecognizer(rotateRecognizer) 
    self.view.addSubview(label); 
    self.imagePicked.addSubview(label) 

func handlePan(recognizer:UIPanGestureRecognizer) { 
    let translation = recognizer.translation(in: self.view) 
    if let view = recognizer.view { 
     view.center = CGPoint(x:view.center.x + translation.x, 
           y:view.center.y + translation.y) 
    } 
    recognizer.setTranslation(CGPoint(x:0,y:0), in: self.view) 
} 

func handleRotate(recognizer : UIRotationGestureRecognizer) { 
    if let view = recognizer.view { 
     view.transform = view.transform.rotated(by: recognizer.rotation) 
     recognizer.rotation = 0 
    } 
} 
+0

설명해 주시겠습니까? – 3gth

+1

UITapGestureRecognizer를 만들었을 때 메서드가 UIPanGestureRecognizer 및 UIRotationGestureRecognizer를 사용하고 있었기 때문에 효과가있었습니다. 또한 메서드가 올바르게 호출되고 IBActions가 메서드로 변경되도록 선택기를 변경했습니다. – Aakash

0

UIlabel's superView의 문제입니다.

imagePickedUIImageView의 인스턴스이고, 기본값이 UIImageView'sisUserInteractionEnabled 인 경우를 flase로 가정합니다.

따라서 imagePicked 및 모든 하위보기는 터치 이벤트를 수신 할 수 없습니다.

self.imagePicked.isUserInteractionEnabled = true; 
+0

난 이미 속성 관리자의 사용자 상호 작용을 설정

이 당신의 코드를 교체하고 그것을 잘 작동합니다. – 3gth