UIImage с цветным и центрированным текстом - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь добавить удобный инициализатор к UIImage, который позволит мне создать изображение с заданным текстом в центре и заданным цветом фона:

У меня естьследующий код:

public convenience init?(color: UIColor, withText: String, withTextColor: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
    let rect = CGRect(origin: .zero, size: size)
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
    color.setFill()
    UIRectFill(rect)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    let label = UILabel()
    label.text = withText
    label.textAlignment = .center
    label.font = UIFont.boldSystemFont(ofSize: 40)
    label.textColor = withTextColor


    guard let cgImage = image?.cgImage else { return nil }
    self.init(cgImage: cgImage)
}

Это создает изображение с правильным цветом фона - хотя я не уверен, как вставить UILabel в середину изображения.

РЕДАКТИРОВАТЬ

enter image description here

1 Ответ

0 голосов
/ 08 октября 2019

Приписанные строки знают, как рисовать себя , поэтому вам не нужна метка. Они также могут сказать вам, насколько они большие или даже обернуть, чтобы соответствовать доступной ширине. Вот игровая площадка, которая показывает, как получить изображение из любой атрибутивной строки:

import UIKit
import PlaygroundSupport

extension NSAttributedString {
  func asImage(size: CGSize = .init(width: .max, height: .max)) -> UIImage {
    UIGraphicsImageRenderer(bounds: boundingRect(with: size, options: [.usesLineFragmentOrigin], context: nil)).image { context in
      self.draw(at: .zero)
    }
  }
}

let attributedString = NSAttributedString.init(string: "testing", attributes: [NSAttributedString.Key.foregroundColor : UIColor.white])
let image = attributedString.asImage()
let imageView = UIImageView(image: image)
PlaygroundPage.current.liveView = imageView
...