Вращение 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))
    }

0 ответов

Другие вопросы по тегам