Я ищу способы рендеринга своих пользовательских видов в изображения в фоновом потоке, и я не уверен, возможно ли это на самом деле, поскольку UIKit не является поточно-ориентированным.Но мне интересно, можно ли манипулировать UIView
layer
в фоновом потоке, пока представление еще нигде не размещено.Как это:
let view = UIView()
let label = UILabel()
label.text = "Hello"
label.sizeToFit()
view.addSubview(label)
view.frame.size = label.bounds.size
view.setNeedsDisplay()
RunLoop.main.run(mode: .default, before: Date())
let size = view.bounds.size
let layer = view.layer
DispatchQueue.global().async {
UIGraphicsBeginImageContext(size)
layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
DispatchQueue.main.async {
let imageView = UIImageView(image: image)
imageView.backgroundColor = .lightGray
imageView.bounds.size = view.bounds.size // retain `view`
imageView.center = CGPoint(x: 200, y: 300)
self.view.addSubview(imageView)
}
}