Adding text over UIImage in swift - programmatically

120 Views Asked by At

I'm trying to add text over UIView just like on instagram Stories. I'm using this function that draws textViews over a a view the size of the screen frame

func passingAndDrawingTextViews(textViews : [UITextView], viewPassed : UIView, inImage : UIImage) -> UIImage{
    
    let scale = UIScreen.main.scale
    
    UIGraphicsBeginImageContextWithOptions(viewPassed.frame.size, false, scale)

    viewPassed.draw(CGRect(x: 0, y: 0, width: viewPassed.frame.width, height: viewPassed.frame.height))
    
    //adding each textView
    textViews.forEach { (textView) in
        let textColor = textView.textColor
        let textFont = UIFont(name: textView.font!.fontName, size: textView.font!.pointSize)
        let textAlignment = textView.textAlignment
        //alignment of the text
        let paragraphStyle: NSMutableParagraphStyle = NSMutableParagraphStyle()
        paragraphStyle.alignment = textAlignment
        
        let textFontAttributes = [
            NSAttributedString.Key.font: textFont,
            NSAttributedString.Key.foregroundColor: textColor,
            NSAttributedString.Key.paragraphStyle : paragraphStyle,
        ]
        
        let rect = CGRect(x: textView.frame.minX, y: textView.frame.minY, width: textView.frame.width, height: textView.frame.height)
        

        textView.text.draw(in: rect, withAttributes: textFontAttributes as [NSAttributedString.Key : Any])

    }
    
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    
    UIGraphicsEndImageContext()
    
    return newImage!
}

The text is drawn, the problem is that It isn't in the exact point the textview is positioned in the viewPassed. In particular the text that is drawn is a little bit upper-left in respect of the original textView.

I was wondering why this could happen and how to solve it, I'm wrapping my head around but it seems I can't find a solution.

0

There are 0 best solutions below