【问题标题】:How to add some text under the image using UIKit如何使用 UIKit 在图像下添加一些文本
【发布时间】:2021-12-11 18:26:50
【问题描述】:

我有这样的图像:

但我想在这张图片添加一些文字,并像新的 UIImage 一样获取它,例如:

据我所知,我应该创建一个新图像。然后将我的图像放入其中并添加文本。 我该怎么做?

我尝试使用类似的东西,但无法将我的文字放在图像下方

func textToImage(drawText text: String, inImage image: UIImage, atPoint point: CGPoint) -> UIImage {
    let textColor = UIColor.white
    let textFont = UIFont(name: "Helvetica Bold", size: 12)!

    let scale = UIScreen.main.scale
    UIGraphicsBeginImageContextWithOptions(image.size, false, scale)

    let textFontAttributes = [
        NSAttributedStringKey.font: textFont,
        NSAttributedStringKey.foregroundColor: textColor,
        ] as [NSAttributedStringKey : Any]
    image.draw(in: CGRect(origin: CGPoint.zero, size: image.size))

    let rect = CGRect(origin: point, size: image.size)
    text.draw(in: rect, withAttributes: textFontAttributes)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
}

PS 我的图片背景很清晰。红色是另一个视图的背景。

【问题讨论】:

  • SwiftUI 还是 UIKit?
  • 对不起,我用的是 UIKit
  • 你肯定尝试过 something。 SO 不是免费的代码编写网站。如果不表现出至少一些(研究)努力,您就不太可能在这里收到答案。
  • 我添加了我的代码

标签: ios swift uikit uiimage core-graphics


【解决方案1】:

一般来说,您应该始终显示一些到目前为止您尝试过的代码。但这是一种琐碎的视图,看起来应该类似于:

class ViewWithImage: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    fatalError("storyboards no thanks")
}

private func setup() {
    backgroundColor = .red
    let imageView = UIImageView()
    imageView.image = UIImage(named: "garbagecan")
    imageView.contentMode = .scaleAspectFit
    imageView.tintColor = .white
    
    let deleteLabel = UILabel()
    deleteLabel.text = "Delete"
    deleteLabel.textColor = .white
    
    let vStack = UIStackView()
    vStack.axis = .vertical
    vStack.spacing = 8
    addSubview(vStack)
    
    NSLayoutConstraint.activate([
        vStack.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 16),
        vStack.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -16),
        vStack.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -16),
        vStack.topAnchor.constraint(equalTo: self.topAnchor, constant: 16)
    ])
    
    vStack.addArrangedSubview(imageView)
    vStack.addArrangedSubview(deleteLabel)
}

}

【讨论】:

  • 谢谢,我添加了我的代码。我应该像新的 UIImage 一样得到它
  • 谢谢,看起来不错。但也许没有 UIView 有什么办法吗?
  • 可以,但是比较复杂,没必要把事情复杂化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多