Я пытаюсь добавить два CALayers из UIImageView и UITextField в контекст, а затем создать изображение из контекста, используя UIGraphicsGetImageFromCurrentImageContext()
, однако я не могу правильно позиционировать текстовое поле. Я хочу, чтобы получившееся изображение соответствовало представлению, в котором первоначально отображается изображение и текстовое поле. Вместо этого текстовое поле появляется наполовину скрытым за верхней частью изображения. В настоящее время я пытаюсь что-то вроде этого (что неправильно):Добавить правильно размещенные слои в контекст
UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, false, 0.0)
let ctx = UIGraphicsGetCurrentContext()
let ht = self.imageView.bounds.size.height
let wdth = self.imageView.bounds.size.width
self.imageView.layer.renderInContext(ctx)
CGContextTranslateCTM(ctx, self.imageView.center.x, self.imageView.center.y)
CGContextConcatCTM(ctx, self.imageView.transform)
CGContextTranslateCTM(ctx, -wdth * self.imageView.layer.anchorPoint.x, -ht * self.imageView.layer.anchorPoint.y)
// Set points for text label here, then...
self.textLabelTop.layer.renderInContext(ctx)
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
Я понимаю CGContextTranslateCTM()
и CTContextConcatCTM()
должны делать с применением оригинальной системы координат на контекст, а затем поместить слой, но я не конечно, как это сделать правильно. Может ли кто-нибудь привести пример правильной техники?
Update: Это похоже на взлом, но вместо перевода баллов в контексте, если я просто добавить текстовое поле как подвид в UIImageView после редактирования и перед UIGraphicsGetImageFromCurrentImageContext()
, все похоже на работу, в том числе с размещение второго текстового поля:
self.imageView.addSubview(self.textLabelTop)
self.imageView.addSubview(self.textLabelBottom)
UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, false, 0.0)
let ctx = UIGraphicsGetCurrentContext()
self.imageView.layer.renderInContext(ctx)
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
Это действительно сработало отлично. Благодаря! – Ja5onHoffman
Я рад, что он решил вашу проблему! – Bannings