2017-01-24 16 views
0

Как перемещать слой, перетаскивая его после добавления CATextLayer в слой UIImageView. Поскольку я добавлю несколько слоев в UIImageView. Итак, как я могу узнать, какой слой я нажал, и переместить его в другую позицию?как перемещать слой путем перетаскивания?

Вот мой код для текста рисования:

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

UIGestureRecognizer и hitTest() являются путь:

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

Вот об этом. Мой код - это скелет, в котором я предполагаю, что вы хотите, чтобы слои внутри imageView. Но они могут быть частью супервизора, если хотите.

Снова, будьте осторожны с тем, как вы настраиваете слои - вам нужно получить к ним доступ, если у вас есть несколько движений. Мой код был попыткой использовать вашу функцию. Возможно, вы могли бы хранить слои в массиве (если вы не знаете, сколько их будет) или как глобальные переменные, как для ImageView, так и для контроллера представления.

+0

Благодарим вас за ответ. Но если 2 слоя перекрываются в том же месте, какой слой будет перемещен? –

+0

На самом деле, я хотел бы реализовать функцию рисования текста, подобную этой https://youtu.be/qdtzZGn7NaM?t=14m2s, вокруг текста есть форма границы, и пользователь может перетаскивать, редактировать или удалять ее. Можно ли решить проблему использования слоя? –