在 UIScrollView 中获取 UIImage 可见部分的正确坐标

Posted

技术标签:

【中文标题】在 UIScrollView 中获取 UIImage 可见部分的正确坐标【英文标题】:Getting the right coordinates of the visible part of a UIImage inside of UIScrollView 【发布时间】:2013-05-13 04:56:29 【问题描述】:

我有一个 UIImage,它位于 UIScrollView 内,因此我可以放大和缩小、裁剪、移动等。

如何获取 UIScrollView 中 UIImage 可见部分的坐标。 我想以原始分辨率裁剪图像(使用 GPUIImage),但我需要矩形的 x、y、宽度和高度。

【问题讨论】:

【参考方案1】:

我使用滚动视图来启用 UIImage 的缩放。裁剪按钮呈现一个覆盖的可调整大小的裁剪视图。以下是我用来确保 UIScrollView 中用户定义的裁剪框与正确的坐标一起添加到 UIImageView 的代码(然后可以用来裁剪图像)。

要找到 x 和 y 坐标,请使用滚动视图 contentOffset 乘以缩放比例的倒数:

float origX = 0;
float origY = 0;
float widthCropper = 0;
float heightCropper = 0;


if (_scrollView.contentOffset.x > 0)
    origX = (_scrollView.contentOffset.x) * (1/_scrollView.zoomScale);

if (_scrollView.contentOffset.y > 0)
    origY = (_scrollView.contentOffset.y) * (1/_scrollView.zoomScale);

如果您需要为滚动视图中显示的内容创建适当大小的裁剪框,您需要调整任何缩放因子的宽度和高度:

widthCropper = (_scrollView.frame.size.width * (1/_scrollView.zoomScale));
heightCropper = (_scrollView.frame.size.height * (1/_scrollView.zoomScale));

并将这个大小合适的矩形作为裁剪视图添加到 UIImageView:

CGRect cropRect = CGRectMake((origX + (SIDE_MARGIN/2)), (origY + (SIDE_MARGIN / 2)), (widthCropper - SIDE_MARGIN), (heightCropper  - SIDE_MARGIN));
_cropView = [[UIView alloc]initWithFrame:cropRect];
[_cropView setBackgroundColor:[UIColor grayColor]];
[_cropView setAlpha:0.7];
[_imageView addSubview:_cropView];
[_imageView setCropView:_cropView];

【讨论】:

如何将uiimageview中添加的部分裁剪为子视图(_cropView)?

以上是关于在 UIScrollView 中获取 UIImage 可见部分的正确坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UiScrollview 中获取子视图的内容

在 UIScrollView 中获取 UIImage 可见部分的正确坐标

在 UIScrollview 中获取 UIView 的子视图

如何获取 UIScrollView 中滚动的 contentOffset?

如何在 UIScrollView 中获取 UIImageView 的位置并只允许平移它?

在动画之前获取两个 CGPoint 之间的值(uiscrollview)