2017-01-24 33 views
0

CATextLayerをUIImageViewレイヤーに追加した後にドラッグしてレイヤーを移動する方法。私はUIImageViewに複数のレイヤーを追加します。では、どのレイヤをクリックして別の位置に移動させるのかをどのように知ることができますか?それについてですドラッグしてレイヤーを移動する方法は?

@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 
    } 
} 

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

私はカスタムビューの問題を解決し、ドラッグを制御するイベントハンドラを定義しました。 –

答えて

0

UIGestureRecognizerhitTest()が移動するための方法です:

は、ここでの描画テキストのための私のコードです。私のコードは、私があなたがimageViewの中のレイヤーを望んでいると仮定しているスケルトンです。しかし、あなたが望むなら、彼らはスーパービューの一部になることができます。

また、レイヤーの設定方法にも注意してください。移動するレイヤーが複数ある場合は特にアクセスする必要があります。私のコードはあなたの関数を使う試みでした。たぶん、配列を(配列の数がわからない場合)配列に格納することも、imageViewまたはビューコントローラのグローバル変数として格納することもできます。

+0

ご返信ありがとうございます。しかし、2つのレイヤーが同じ場所に重なっていれば、そのレイヤーは移動されますか? –

+0

実際には、私はこのような描画テキスト関数を実装したいと思います。https://youtu.be/qdtzZGn7NaM?t=14m2sテキストの周りに境界線の形があり、ユーザーがそれをドラッグ、編集、または削除することができます。それは層の問題の使用を解決することは可能ですか? –

関連する問題