如何在UIImageView上添加交互式UILabel?

PPr*_*sai 6 interactive uiimageview uilabel ios swift

我需要添加几个标签UIImageView.标签的文本可以通过点击它们来更改.实现这一目标的最佳方法是什么?我正在使用Swift编程语言.在stackoverflow上查找一些解决方案,我发现了一些使用String.drawInRect方法在矩形中绘制一些文本的演练,然后将其放置在UIImageView.但是像这样我认为我不能改变文本,甚至不能识别它们上的触摸事件.请帮忙.

UPDATE

我的代码到目前为止:

override func viewDidLoad() {
    super.viewDidLoad()
    let img = UIImage(named: "Image")
    let imgView = UIImageView(image: img)

    self.view.addSubview(imgView)

    var myLabel = UILabel()
    myLabel.text = "Hello There"
    myLabel.textColor = UIColor.redColor()
    myLabel.font = UIFont(name: "Marker Felt", size: 20)
    myLabel.accessibilityIdentifier = "this is good!"
    myLabel.frame = CGRect(x: img!.size.width/2 /* - myLable.width / 2 ? */, y: 0, width: img!.size.width, height: 40)
    imgView.addSubview(myLabel)
    imgView.userInteractionEnabled = true
    myLabel.userInteractionEnabled = true
    let tapGesture = UITapGestureRecognizer(target: self, action: "handlePanGesture:")
    myLabel.addGestureRecognizer(tapGesture)
}

func handlePanGesture(sender: UITapGestureRecognizer) {
    var senderView = sender.view as! UILabel
    print(senderView.text)
    senderView.text = "look how i changed!"
    print(senderView.accessibilityIdentifier)
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,结果是积极的,我有一个图像,顶部有标签,可以响应触摸事件.现在我需要找到标签的宽度,这样我就可以在需要时有效地将它放在中心位置.然后我需要找到一种方法将标签放在相对于图像左上角的精确坐标作为原点.

对这两项任务的任何帮助都将非常感激.

Sah*_*hil 6

添加标签ImageView 是最好的方法.但你也可以通过添加button来实现ImageView.

我创建了一个示例,其中我创建了一个ImageView故事板并在ViewController类中创建它的插座,并在viewDidLoad我创建了一个标签并将其添加到标签并添加UITapGestureRecognizer到标签.当用户点击标签时,我们更改了标签文本及其位置.

class ViewController: UIViewController {

 @IBOutlet weak var winterImageView: UIImageView!

 override func viewDidLoad() {
  super.viewDidLoad()

  let label = UILabel(frame: CGRect(x: 10, y: 0, width: self.winterImageView.frame.width - 10, height: 30))
  label.textColor = UIColor.redColor()

  label.userInteractionEnabled = true
  let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
  label.addGestureRecognizer(tapGesture)
  label.text = "Is Winter is coming, My Friend?"
  self.winterImageView.addSubview(label)

}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更改标签文本和位置 handleTap

 /// handle tap here 
 func handleTap(sender: UITapGestureRecognizer) {

  let senderView = sender.view as! UILabel
senderView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: senderView, attribute: .CenterX, relatedBy: .Equal, toItem: self.winterImageView, attribute: .CenterX, multiplier: 1, constant: 0).active = true

NSLayoutConstraint(item: senderView, attribute: .CenterY, relatedBy: .Equal, toItem: self.winterImageView, attribute: .CenterY, multiplier: 1, constant: 0).active = true
 print(senderView.text)
senderView.text = "Yes!!! Winter is coming, My Friend!!"

}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以从此处下载项目InteractiveLabel