2017-01-24 4 views
0

Verschieben eines Layers durch Ziehen, nachdem ich den CATextLayer zu UIImageView Layer hinzugefügt habe. Ich werde mehr als eine Ebene zu UIImageView hinzufügen. Also, wie kann ich wissen, auf welche Ebene ich geklickt habe und sie an eine andere Position verschieben?Wie verschiebe ich eine Ebene durch Ziehen?

Hier ist mein Code für das Zeichnen Text:

func addText() -> CATextLayer{ 
    let rect:CGRect = CGRect(x: 50, y: 600, width: 120, height: 60) 
    let myAttributes = [ 
         NSFontAttributeName: UIFont(name: "HelveticaNeue-Thin", size:18)!, 
         NSForegroundColorAttributeName: UIColor.black.cgColor 
         ] as [String : Any] 
    let myAttributedString = NSAttributedString(string: "TEST STRING", attributes: myAttributes) 

    let textLayer = CATextLayer() 
    textLayer.frame = rect 
    textLayer.string = myAttributedString 
    textLayer.position = CGPoint(x:150,y:400) 
    textLayer.alignmentMode = kCAAlignmentCenter 
    return textLayer 
} 
+0

Ich habe das Problem der benutzerdefinierten Ansicht gelöst und die Ereignishandler zum Steuern des Ziehens definiert. –

Antwort

0

UIGestureRecognizer und hitTest() der Weg zu gehen:

@IBOutlet weak var imageView: ImageView! 
let panGesture = UIPanGestureRecognizer() 
var newLayer = CATextLayer() 

// this is your code above, be careful, you want each layer "named"! 
nextLayer = addText() 

imageView.layer.addSubLayer(nextLayer) 
imageView.addGestureRecognizer(panGesture) 

func moveLayer(_ recognizer:UIPanGestureRecognizer) { 
    let p = recognizer.location(in: self) 
    if newLayer.hitTest(p) != nil { 
     newLayer.position = p 
    } 
} 

, was darüber ist. Mein Code ist ein Skelett, von dem ich annehme, dass Sie die Ebenen in der imageView haben wollen. Aber sie können Teil der Superview sein, wenn Sie wollen.

Seien Sie wieder vorsichtig mit der Einrichtung der Ebenen - Sie müssen speziell auf sie zugreifen, wenn Sie mehrere Personen haben, die sich bewegen können. Mein Code war ein Versuch, Ihre Funktion zu verwenden. Vielleicht könnten Sie die Layer in einem Array speichern (wenn Sie nicht wissen, wie viele es sein werden) oder als globale Variablen für den imageView oder den View-Controller.

+0

danke für Ihre Antwort. Aber wenn sich zwei Schichten an derselben Stelle überlappen, welche Schicht wird verschoben? –

+0

Eigentlich möchte ich die Zeichenfunktion wie diese implementieren https://youtu.be/qdtzZGn7NaM?t=14m2s gibt es eine Rahmenform um den Text und Benutzer kann ziehen, bearbeiten oder löschen. Ist es möglich, das Problem der Verwendung von Layer zu lösen? –

Verwandte Themen