DNB*_*ims 2 objective-c uiview uiimageview
这是我得到的视图,我有一个layer view,检测用户触摸,和a image view,显示图像.该layer view保险是否会在顶部image view.这个image view图像是方面适合的.所以,它不会失去这个比例.如果在我的layer view触摸中100, 240,它是一个layer view坐标,而不是图像的坐标.我想知道如何将layer view坐标转换为图像的坐标.在这个例子中,图像大小可以是180×180,因此,坐标的layer view在imageIS 60, 90.
谢谢.
如果我正确理解了这个问题,你想得到一个当前与图层坐标系相关的点,并将其转换为图像视图的坐标系?
在这种情况下,有几种方法可以做到这一点.
最简单的是使用convertPoint:fromView:或convertPoint:toView:
CGPoint imageViewTouchPoint = [layerView convertPoint:touchPoint fromView:imageView];
CGPoint imageViewTouchPoint = [imageView convertPoint:touchPoint toView:layerView];
任何一个都应该工作.
编辑 - 我现在意识到,只有当它UIImageView具有相同的框架时UIImage,由于UIViewContentModeScaleAspectFit属性,你说它可能没有.
在这种情况下,除非我弄错了,否则图像框架在UIImageView drawRect:方法内部计算,而不是设置的属性.这意味着您必须自己计算.
绝对可以imageViewTouchPoint从上面的方法之一获得(以防万一你想在UIImageView不是全屏大小的情况下使用相同的逻辑).
然后,您需要计算缩放的图像帧.有几种方法可以做到这一点.有些人蛮力并根据图像的哪一侧更长时间手动计算,然后确定哪一侧应该缩放.然后,他们通过使图像居中并减去图像和图像视图的边并除以2来计算原点.
如果没有必要,我喜欢编写尽可能少的代码,即使这意味着导入框架.如果导入,AVFoundation您将获得一个方法AVMakeRectWithAspectRatioInsideRect,您可以使用该方法在一行代码中实际计算缩放的矩形.
CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(image.size,imageView.frame);
无论使用哪种方法,您都可以使用缩放的图像原点简单地翻译您的触摸点:
CGPoint imageTouchPoint = CGPointMake(imageViewTouchPoint.x - imageRect.origin.x,imageViewTouchPoint.y - imageRect.origin.y);
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |