Я пытаюсь объединить UIImage и текст UITextField, создавая другое изображение, но у меня ничего не получилось.
Что делает мое приложение? или это должно сделать?
В основном это берет изображение, созданное методом моментального снимка, объединяет это изображение с текстом из UITextField, создавая другое изображение, которое будет сохранено и показано в tableView.
Но у меня много проблем, чтобы заставить его работать.
Когда я беру только изображение, все работает хорошо. Следуй моему коду.
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first, let startPoint = startPoint else {return}
let currentPoint = touch.location(in: imageView)
let frame = rect(from: startPoint, to: currentPoint)
rectShapeLayer.removeFromSuperlayer()
if frame.size.width < 1{
tfText.resignFirstResponder()
} else {
let memedImage = getImage(frame: frame, imageView: self.imageView)
save(imageView: imageView, image: memedImage)
}
}
func getImage(frame: CGRect, imageView: UIImageView) -> UIImage {
let cropImage = imageView.snapshot(rect: frame, afterScreenUpdates: true)
return cropImage
Но когда я пытаюсь создать изображение, используя UIGraphicsBeginImageContextWithOptions для объединения его с textField, у меня не получается.
Следуйте за моим кодом
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first, let startPoint = startPoint else {return}
let currentPoint = touch.location(in: imageView)
let frame = rect(from: startPoint, to: currentPoint)
rectShapeLayer.removeFromSuperlayer()
if frame.size.width < 1{
tfText.resignFirstResponder()
} else {
let memedImage = getImage(frame: frame, imageView: self.imageView)
save(imageView: imageView, image: memedImage)
}
}
func getImage(frame: CGRect, imageView: UIImageView) -> UIImage {
let cropImage = imageView.snapshot(rect: frame, afterScreenUpdates: true)
UIGraphicsBeginImageContextWithOptions(cropImage.size, false, 0.0)
cropImage.draw(in: frame)
tfText.drawText(in: frame)
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
Позвольте мне показать вам несколько скриншотов моего приложения.
Сначала создается только изображение.
Теперь, когда я пытаюсь объединить текст и изображение.
Пожалуйста, посмотрите на область отладки.
Изображения созданы, но они не отображаются в tableView.
Что я делаю не так?
ОБНОВЛЕНИЕ ВОПРОСА
С кодом выше мой memedImage пуст. "Спасибо, Роб"
Итак, я изменил свой предыдущий getImage (_ :) на:
func getANewImage(frame: CGRect, imageView: UIImageView, textField: UITextField) -> UIImage{
let cropImage = imageView.snapshot(rect: frame, afterScreenUpdates: true)
let newImageView = UIImageView(image: cropImage)
UIGraphicsBeginImageContextWithOptions(newImageView.frame.size, false, 0.0)
let context = UIGraphicsGetCurrentContext()!
context.translateBy(x: newImageView.frame.origin.x, y: newImageView.frame.origin.y)
newImageView.layer.render(in: context)
textField.layer.render(in: context)
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
Таким образом, я почти получил ... Я создал новое изображение с textField, но textField изменил свою позицию, он должен быть в центре.
С .draw не работает, но с layer.render работает почти хорошо.