gpt4 book ai didi

ios - Swift 3 - NSString.draw(in : rect, withAttributes:) -- 文本未在预期点绘制

转载 作者:行者123 更新时间:2023-11-29 00:14:43 27 4
gpt4 key购买 nike

开球Stackoverflow post ,这非常有帮助,我已经能够成功地将文本绘制到全屏图像上(我使用预先录制的短字符串标记图像,例如“垃圾箱”)。但是,文本没有出现在我想要的位置,它以用户点击的确切点为中心。这是我的代码,基于上面帖子中的一些代码,但针对 Swift3 进行了更新 --

    func addTextToImage(text: NSString, inImage: UIImage, atPoint:CGPoint)     -> UIImage{

// Setup the font specific variables
let textColor: UIColor = UIColor.red
let textFont: UIFont = UIFont(name: "Helvetica Bold", size: 80)!

//Setups up the font attributes that will be later used to dictate how the text should be drawn
let textFontAttributes = [
NSFontAttributeName: textFont,
NSForegroundColorAttributeName: textColor,
]

// Create bitmap based graphics context
UIGraphicsBeginImageContextWithOptions(inImage.size, false, 0.0)

//Put the image into a rectangle as large as the original image.
inImage.draw(in: CGRect(x:0, y:0, width:inImage.size.width, height: inImage.size.height))

// Create the rectangle where the text will be written
let rect: CGRect = CGRect(x:atPoint.x, y:atPoint.y, width:inImage.size.width, height: inImage.size.height)

// Draft the text in the rectangle
text.draw(in: rect, withAttributes: textFontAttributes)

// Get the image from the graphics context
let newImag = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return newImag!
}

上面的atPoint是用户点击的位置。这就是我想要绘制文本的地方。但是,文本始终写在图像的左上角。例如,在附图中,我点击了瀑布的一半,因为那是我想要写入文本字符串“Trash”的地方。但相反,您可以看到它写在左上角。我尝试了很多东西但无法得到解决方案。我很感激任何帮助。 enter image description here

TrashShouldBeInMiddleOfWaterfallButIsNot

最佳答案

你如何设置atPoint ?如果您使用与屏幕相同的坐标空间,那将不起作用……我怀疑这是正在发生的事情。

假设您的图像是 1000 x 2000 , 你在 UIImageView 中展示它那是 100 x 200 .如果你点击 x: 50 y: 100在 View 中(在中心),然后将该点发送到您的函数,它将在 x: 50 y: 100 处绘制文本图像的 - 将位于左上角,而不是中心。

因此,您需要将您的点从 ImageView 大小转换为实际图像大小。在您调用您的函数之前,或者通过修改您的函数来处理它。

一个例子(不一定是最好的方法):

    // assume:
// View Size is 100 x 200
// Image Size is 1000 x 2000
// tapPoint is CGPoint(x: 50, y: 100)

let xFactor = image.size.width / imageView.frame.size.width
// xFactor now equals 10

let yFactor = image.size.height / imageView.frame.size.height
// yFactor now equals 10

let convertedPoint = CGPoint(x: tapPoint.x * xFactor, y: tapPoint.y * yFactor)

convertedPoint现在等于 CGPoint(x: 500, y: 1000),您可以将其作为 atPoint 发送您调用 addTextToImage 的值(value).

关于ios - Swift 3 - NSString.draw(in : rect, withAttributes:) -- 文本未在预期点绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com