Нарисуйте UIView в CGContext - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь нарисовать простые UIView в CGContext.Я правильно рисую строку, но UIView не рисуется.

Метод, используемый для рисования вида:

view.draw(view.layer, in: context)

Но он не работает.Есть ли другой способ нарисовать UIView в CGContext?

import UIKit
import CoreGraphics

let contextSize = CGSize(width: 400, height: 400)

UIGraphicsBeginImageContextWithOptions(contextSize, false, 0.0)

guard let context = UIGraphicsGetCurrentContext() else {
    fatalError("no context")
}

let size = CGSize(width: 30, height: 20)
let point = CGPoint(x: 20, y: 240)
let rect = CGRect(origin: point, size: size)

let text = "TEST"
let paragraphStyle = NSMutableParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
paragraphStyle.minimumLineHeight = UIFont.systemFont(ofSize: 6).lineHeight
paragraphStyle.lineBreakMode = .byWordWrapping
paragraphStyle.alignment = .center
let attributes: [NSAttributedString.Key : Any] =  [.font: UIFont.systemFont(ofSize: 12),
                                                   .foregroundColor: UIColor.cyan,
                                                   .paragraphStyle: paragraphStyle]
text.draw(with: rect, options: .usesLineFragmentOrigin, attributes: attributes, context: nil)


let view = UIView()
view.backgroundColor = .magenta
view.layer.borderWidth = 2.0
view.layer.borderColor = UIColor.green.cgColor
view.frame = CGRect(origin: point, size: size)

view.draw(view.layer, in: context)

let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

1 Ответ

1 голос
/ 02 июля 2019

Я полагаю, что вы ищете

view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)

Это будет соответствовать любому вашему текущему контексту.И это уже должно быть вашим контекстом, так как вы делаете context = UIGraphicsGetCurrentContext().Я попробовал это с вашим кодом, и это похоже на работу.Я получил изображение с прямоугольником с рамками и текстом.

...