【发布时间】:2018-06-10 15:10:21
【问题描述】:
我正在尝试实现在 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
}}
@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);。但没有任何工作正常。
我错过了什么?
谢谢! 莎拉
【问题讨论】:
-
" 照片在“Aspect Fit”中的 UIImageView 中显示给用户“这就是问题所在。用户点击在图像视图中的点与用户点击在图像中的点不同,因为图像视图正在改变大小/位置图像以显示它。您需要计算回图像坐标才能知道在哪里放置复选标记。
-
“我尝试了很多” 好的,所以您似乎确实意识到这就是问题所在。但是你没有展示你尝试了什么,所以不可能说你做错了什么。
-
还有一件事:即使你解决了这个问题,你也需要决定在哪里绘制与点击点相关的复选标记图像。你想要它的左上角在点击点吗?或者它的 center 在点击点?在我看来,用户自然会期待后者。
-
图片应该在与点击点相关的中心。是的,我意识到这就是问题所在。 “我尝试了很多”我是说我尝试了很多关系来获得正确的比例,比如 let actualSize = AVMakeRect(aspectRatio: (originalImage?.size)!, insideRect: imageDIsplay.frame).size.height let imageSize = originalImage!.size.height 让比率 = imageSize / actualSize。但我不确定我是否走在正确的道路上......
标签: ios swift uiimagepickercontroller uitapgesturerecognizer