Мне удалось получить этот эффект, добавив еще один UIImageView (будем называть DrawingImageView для ясности) поверх UIImageView, который отображает изображение с текстом. Идея состоит в том, чтобы сначала отобразить полностью черное изображение с примерно 0,3 альфа в DrawingImageView, а затем, когда вы рисуете линию, использовать .destinationOut в качестве режима смешивания контекста. Код может выглядеть примерно так:
override func viewDidLoad() {
super.viewDidLoad()
drawBlackBackground()
}
func drawBlackBackground() {
UIGraphicsBeginImageContext(drawingImageView.frame.size)
UIGraphicsGetCurrentContext()
let image = UIImage(named: "black")
image?.draw(in: drawingImageView.frame)
self.drawingImageView.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {
UIGraphicsBeginImageContext(drawingImageView.frame.size)
let context = UIGraphicsGetCurrentContext()
drawingImageView.image?.draw(in: drawingImageView.frame)
context?.move(to: fromPoint)
context?.addLine(to: toPoint)
context?.setLineCap(.round)
context?.setLineWidth(20)
context?.setStrokeColor(red: 0, green: 1, blue: 0, alpha: 1)
context?.setBlendMode(.destinationOut)
context?.strokePath()
self.drawingImageView.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
Вы можете проверить этот пост для получения дополнительной информации о рисовании в swift и этот один для более продвинутой версии. , Также здесь вы можете найти больше информации о режимах наложения.