在 UIImage 上添加 TextViews - Swift - 以编程方式
Posted
技术标签:
【中文标题】在 UIImage 上添加 TextViews - Swift - 以编程方式【英文标题】:Adding TextViews over UIImage - Swift - Programmatically 【发布时间】:2020-10-06 12:26:35 【问题描述】:我有一个为我提供分辨率为 1920x1080 的 UIImage 的相机,我已经实现了一个系统,我可以将 UITextViews 添加为子视图,我的目标是将它们添加到原始 UIImage 并导出分辨率为 1920x1080 的最终图像。
所以我一直在考虑的程序是这样的:
我在 view.frame 上添加了 upperView,它负责绘制屏幕上存在的所有 textView。
然后我想在原始 UIImage 上按比例添加这个视图
这是我实现的代码:
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 + textView.textContainer.lineFragmentPadding, y: textView.frame.minY + textView.textContainerInset.top, width: textView.frame.width, height: textView.frame.height)
textView.text.draw(in: rect, withAttributes: textFontAttributes as [NSAttributedString.Key : Any])
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIGraphicsBeginImageContext(inImage.size)
let rect = CGRect(x: 0, y: 0, width: inImage.size.width, height: inImage.size.height)
inImage.draw(in: CGRect(x: 0, y: 0, width: inImage.size.width, height: inImage.size.height))
newImage!.draw(in: rect)
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return result!
在函数中我分别传递了textViews列表、upperView和originalImage。
但问题是我得到的 textView 在 x 轴上被拉伸了。我不知道为什么会这样。
我得到了什么:
我想要什么
【问题讨论】:
【参考方案1】:您在此行中传递的矩形:
newImage!.draw(in: rect)
实际上是它自己的屏幕大小,因此图像会伸展以填充此矩形。 所以做这个:
let rect = CGRect(x: 0, y: 0, width: inImage.size.width, height: inImage.size.height)
你传入的图片的大小。
【讨论】:
我看不出你建议的代码和我正在实施的代码有什么不同 将值更改为您的 newImage 实际大小。让它 rect = CGRect(x: 0, y: 0, width: 300, height: 200) 并检查差异。以上是关于在 UIImage 上添加 TextViews - Swift - 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章
在 UIImage 上添加 UIView - swift - 以编程方式
将LinearLayout添加到ConstraintLayout时,TextViews消失