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

时间:2013-05-13 04:56:30

标签: uiscrollview uiimage gpuimage

我在UIScrollView中有一个UIImage,所以我可以放大和缩小,裁剪,移动等等。

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

1 个答案:

答案 0 :(得分:1)

我使用scrollview来启用UIImage的缩放。裁剪按钮呈现重叠的可调整大小的裁剪视图。以下是我用来确保UIScrollView中用户定义的裁剪框被添加到UIImageView的正确坐标(然后可用于裁剪图像)的代码。

要查找x和y坐标,请使用scrollview contentOffset乘以zoomscale的倒数:

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];