设置UIView(iOS)的角落

时间:2016-03-25 14:04:40

标签: ios swift uiview avfoundation

我有以下问题:我正在使用AVFoundation扫描QR码。这非常有效,我还可以通过添加子视图并按frame设置subview.frame = qrCodeObject.bounds属性来围绕代码创建边框。这只会出现边框只是一个矩形并且忽略QR码透视的问题。

我知道qrCodeObject有一个属性corners,它包含检测到的QR码的右上角,左上角,右下角和左下角。

我现在的问题是:如何将这些角点应用到“边框”视图,使此边框与QR代码具有相同的视角?或者换句话说:如何根据角点“转换”视图?

提前多多感谢!

更新 在这里你可以看到问题:红色框是一个UIView,它的frame属性设置为QR代码bounds属性。这错过了观点。我想将UIView(红色框)转换为跟随QR码的corners属性,其中包括右上角,左上角,右下角和左下角(CGPoint)二维码。将它应用于UIView非常重要,因为我后来想将它应用于ImageView。另外一个掩码是不可用的,因为它只隐藏了部分视图,但没有拉伸或转换视图的内容。

QR code and box

4 个答案:

答案 0 :(得分:1)

我找到了一个解决方案:AGGeometryKit做了诀窍:https://github.com/hfossli/AGGeometryKit/

感谢大家的帮助!

答案 1 :(得分:0)

据我所知,您无法以这种方式转换CGRect。 (至少我不知道任何可以进行这种图像处理的框架。)

您可以使用qrCodeObject的点绘制多边形。

在你的UIView的drawRect中,更改使用CGContext和CGPath来绘制你想要的路径。

您希望绘图UIView的大小与显示QR代码的大小相同,这样您就不必将这些点转换为第二个坐标空间。

如果您需要有关如何执行此操作的更多指导,请

This answer

答案 2 :(得分:0)

好的,你面临的问题是CGRect只能代表一个没有倾斜或扭曲的矩形。你正在处理的是一种具有不同视角失真的图像。

我没有尝试这样做,但听起来像AVFoundation出于某种原因给你4个CGPoint对象。您需要使用CGPoint绘制这4个UIBezierPath,而不是尝试绘制CGRect。只需创建一个移动到第一个点的贝塞尔曲线路径,然后绘制线条到每个后续点,最后再回到第一个点。这将为您提供一个考虑到QR码失真的四边形。

答案 3 :(得分:0)

CATransform3DRotate可能是你的朋友,在这里。

https://guides.codepath.com/ios/Using-Perspective-Transforms可能是一个很好的起点。