Нарисуйте другое изображение на UIImage - - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь реализовать функцию, которая рисует изображение в определенной точке UIImageView.

1.) Таким образом, пользователь делает фотографию 2.) Фотография отображается пользователю в UIImageView в«Соотношение сторон» 3.) Пользователь нажимает на UIImageView, чтобы поместить изображение в точку касания 4.) Отображается комбинированное изображение

код:

extension UIImage {
func image(byDrawingImage image: UIImage, inRect rect: CGRect) -> UIImage! {
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    image.draw(in: rect)
    let result = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return result
}}

source

    @IBAction func imageTapped(_ sender: UITapGestureRecognizer) {


    let pointTapped = sender.location(in: imageDIsplay)

    imageDIsplay.image = originalImage?.image(byDrawingImage: #imageLiteral(resourceName: "checkmark.png"), inRect: CGRect(x: originalImage!.size.width / imageDIsplay.frame.width * pointTapped.x, y: originalImage!.size.height / imageDIsplay.frame.height * pointTapped.y, width: 100, height: 100))

}

моя проблема: «Изображение галочки» никогда не находится в точной точке, где я нажал.

Я много пробовалвместо originalImage!.size.width / imageDIsplay.frame.width, чтобы получить лучшее соотношение, включая CGRect AVMakeRectWithAspectRatioInsideRect(CGSize aspectRatio, CGRect boundingRect);.Но ничего не работает правильно.

Что мне не хватает?

СПАСИБО!Сара

1 Ответ

0 голосов
/ 10 июня 2018

Вы определенно на правильном пути.Будет полезно иметь под рукой рабочую утилиту для преобразования точки в границах просмотра изображения в точку в границах изображения, когда изображение отображается в режиме содержимого «подгонка аспекта»:

extension UIImageView {
    func convertPointToImageCoordinates(_ p:CGPoint) -> CGPoint {
        switch self.contentMode {
        case .scaleAspectFit:
            let r = AVMakeRect(
                 aspectRatio: self.image!.size, insideRect: self.bounds)
            let scale = self.image!.size.width / r.width
            var p2 = CGPoint(x: p.x - r.minX, y: p.y - r.minY)
            p2 = CGPoint(x: p2.x * scale, y: p2.y * scale)
            return p2
        default:
            fatalError("not written")
        }
    }
}

Теперь вы можете получить повернутую координату относительно исходного изображения, чтобы вы могли решить, где разместить изображение галочки относительно этого.

...