ios - 在 UIImage 上绘制另一个图像 -

标签 ios swift uiimagepickercontroller uitapgesturerecognizer

我正在尝试实现一个在 UIImageView 的特定点绘制图像的功能。

1.) 所以用户拍了一张照片 2.) 照片在“Aspect Fit”中的 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(CGSizespectRatio, CGRectboundingRect);。但没有任何东西能正常工作。

我错过了什么?

谢谢! 莎拉

最佳答案

您绝对走在正确的道路上。手头有一个可用的utility会很有用。当图像以“宽高比”内容模式显示时,将 ImageView 边界中的点转换为图像边界中的点:

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")
        }
    }
}

现在您可以获得相对于原始图像的点击坐标,因此您可以决定相对于该坐标放置复选标记图像的位置。

关于ios - 在 UIImage 上绘制另一个图像 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50785064/

相关文章:

iOS 8 UIImagePickerController 在缩放时崩溃

ios - 编写一个 iOS 应用程序来支付水电费

ios - 用户的电子邮件为零 - Firebase,FacebookSDK

ios - 以编程方式快速重新加载应用程序

objective-c - 如何在 NSOutlineView 的高亮常规模式下显示显示/隐藏按钮?

iphone - 如何将 UIImagePickerController 与基于 tabBar 的应用程序一起使用?

ios - 子类化 UIImagePickerController 以添加功能

iphone - App 更新后 Core Data 轻量级迁移崩溃

objective-c - MPMoviePlayerViewController 无法设置当前播放时间

ios - 键盘将 UIView 推开