从1280x720转换为UIView尺寸

时间:2013-03-26 19:17:08

标签: xcode ios6 uikit core-graphics

我有一个应用程序,可以从AVCaptureDevice样本缓冲区委托中找到QR查找器标记。现在我试图在屏幕上放置框以覆盖QR标记。但是,我无法在1280x720像素分辨率和cameraView尺寸之间进行转换。

我试图编写一个基于这些参数转换CGRect的方法(以及视图坐标系是倒置的这一事实),但它不会起作用。它也可能与相机设备的方向有关。这是转换方法的代码:

-(CGRect) convertRect:(CGRect) oldRect From90DegreeRotatedCameraSize1280x720ToUIViewSize:(CGSize) viewSize
{
//remember that we are using a gravity of resize aspect fill

double xScale = viewSize.width / 720;
double yScale = viewSize.height / 1280;

if (xScale < yScale)
    return CGRectMake(oldRect.origin.x * xScale, viewSize.height - oldRect.origin.y * xScale, oldRect.size.height * xScale, oldRect.size.width * xScale);
else
    return CGRectMake(oldRect.origin.x * yScale, viewSize.height - oldRect.origin.y * yScale, oldRect.size.height * yScale, oldRect.size.width * yScale);
}

任何人都能优雅地解决这个相对简单的空间坐标问题吗?

编辑 -

我做了一个连接视频方向的NSLog,结果证明它永远不会从1改变(我认为它是纵向的纵向)。从这里,它应该更容易找到解决方案因为坐标不会在不同的方向上发生变化。

任何想法,编码社区?

1 个答案:

答案 0 :(得分:0)

想出来:

当iOS填充视图时,它会将其居中,以便切断两边。为了在视图坐标之间转换,您需要缩放,然后按照截断的方向进行平移:

            return CGRectMake(oldRect.origin.x * xScale, oldRect.origin.y * xScale - (1280 * xScale - viewSize.height) / 2, oldRect.size.height * xScale, oldRect.size.width * yScale);