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

标签 ios swift uiimageview uilabel interactive

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

更新

到目前为止我的代码:

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

到目前为止,结果是肯定的,我有一张图像,上面有标签,可以响应触摸事件。现在我需要找到标签的宽度,以便在需要时可以有效地将它放在中间。然后我需要找到一种方法将标签放置在相对于图像左上角作为原点的精确坐标处。

我们将不胜感激对这两项任务的任何帮助。

最佳答案

ImageView 上添加标签是最好的方法。但您也可以通过在 ImageView 上添加 button 来实现。

我创建了一个示例,其中我在 Storyboard上创建了一个 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)

}

enter image description here

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!!"

}

enter image description here

您可以从这里下载项目InteractiveLabel

关于ios - 如何在 UIImageView 之上添加交互式 UILabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39828485/

相关文章:

iOS CoreData - 使用现有索引预填充数据库

ios - 在 Swift 中,将 "anywhere"注册为协议(protocol)的委托(delegate)

ios - 使用 Swift 创建 iOS 应用程序,需要知道如何使用 mysql 数据库跟踪用户数据?

ios - 创建一组相同的 UIImageView subview

ios - 将 UIImage View 从 A 点移动到 B 点的最简单代码

iphone - 在 UITextField 中显示表情符号

ios - 如何通过互联网每天更改应用程序中的图像

ios - 如何在 Swift 3 中为带有可选参数的函数创建选择器?

ios - 执行从 - TableViewCell.xib 到 UIView - 和 - TableView.xib 到 UIViewController -

ios - UIButton 文本和图像