Вращение UILabel в PDF Центр изменения контекста
Я работал над контекстом PDF, когда у меня есть UIView, который я делаю динамически, который содержит UILabel и UIImageView. Я сталкиваюсь со следующей проблемой:
1) Когда я использую эту функцию в качестве myView.drawHierarchy(), мое вращение UILabel в порядке, но его положение изменяется. Пожалуйста помоги:
extension UIView {
func drawHierarchy() {
layoutSubviews()
let c = UIGraphicsGetCurrentContext()
c?.saveGState()
c?.translateBy(x: frame.origin.x, y: frame.origin.y)
if backgroundColor != nil {
c?.setFillColor((backgroundColor?.cgColor)!)
c?.fill(bounds)
}
if (self is UILabel) {
c?.textMatrix = .identity
let label = self as! UILabel
let rotation = findRotation(from: label.transform)
print(rotation)
print(rotationValue)
print(label.transform)
c?.translateBy(x: self.width / 2, y: self.height / 2)
c?.rotate(by: rotationValue)
c?.translateBy(x: -self.width / 2 + self.origin.x, y: -self.height / 2 + self.origin.y)
// c?.concatenate(label.transform)
c?.setFillColor((UIColor.purple.cgColor))
c?.fill(bounds)
// self.layer.render(in: c!)
c?.setShadow(offset: label.layer.shadowOffset, blur: CGFloat(label.layer.shadowRadius), color: label.layer.shadowColor)
c?.setAlpha(CGFloat(label.layer.shadowOpacity))
}
//***********Following code is to add shape layer ********
if (self is UIImageView) {
print("Imageview ------")
let imgVw = self as! UIImageView
print(imgVw.layer.shadowOpacity)
if imgVw.layer.shadowOpacity > 0 {
c?.setShadow(offset: imgVw.layer.shadowOffset, blur: CGFloat(imgVw.layer.shadowRadius), color: imgVw.layer.shadowColor)
c?.setAlpha(CGFloat(imgVw.layer.shadowOpacity))
}
}
let shapeLayer = layer.mask as? CAShapeLayer
if shapeLayer != nil {
c?.addPath((shapeLayer?.path)!)
c?.clip()
}
draw(bounds)
for v in subviews {
if v.isHidden {
continue
}
v.drawHierarchy()
}
c?.restoreGState()
}
func findRotation(from transform: CGAffineTransform) -> Double {
return atan2(Double(transform.b), Double(transform.a))
}