Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置UIView(iOS)的角点_Ios_Swift_Uiview_Avfoundation - Fatal编程技术网

设置UIView(iOS)的角点

设置UIView(iOS)的角点,ios,swift,uiview,avfoundation,Ios,Swift,Uiview,Avfoundation,我有以下问题:我正在用AVFoundation扫描二维码。这非常有效,我还可以通过添加子视图在代码周围创建边框,并通过subview.frame=qrCodeObject.bounds设置frame属性。这只会有一个问题,即边框只是一个矩形,并且忽略了二维码的透视图 我知道qrCodeObject有一个属性corners,它包含检测到的QR码的右上、左上、右下和左下点 我现在的问题是:如何将这些角点应用于“边界”视图,使此边界具有与二维码相同的透视图?或者换句话说:如何根据角点“变换”视图 提前

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

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

我现在的问题是:如何将这些角点应用于“边界”视图,使此边界具有与二维码相同的透视图?或者换句话说:如何根据角点“变换”视图

提前多谢

更新: 在这里您可以看到问题:红色框是UIView,它的
frame
属性设置为QR codes
bounds
属性。这忽略了视角。我想将UIView(红色框)转换为二维码的
属性,包括二维码的右上角、左上角、右下角和左下角点(
CGPoint
)。将其应用于UIView非常重要,因为我稍后会将其应用于ImageView。此外,遮罩也不可用,因为它仅隐藏视图的一部分,而不拉伸或变换视图的内容


据我所知,你不能用这种方式转换CGRect。(至少我不知道有哪种框架可以进行这种图像处理。)

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

在UIView的
drawRect
中,更改use CGContext和CGPath以绘制所需的路径

您希望工程视图的大小与显示二维码的视图相同,这样就不必将点转换到第二个坐标空间


如果你需要更多的指导如何做到这一点,我们会提供指导

好的,您面临的问题是,
CGRect
只能表示一个没有倾斜或扭曲的矩形。你要处理的是一个具有不同类型透视失真的图像


我还没有尝试过这样做,但听上去AVFoundation提供4个CGPoint对象是有原因的。您需要使用
UIBezierPath
绘制这4个
CGPoint
s,而不是尝试绘制CGRect。只需创建一个移动到第一个点的贝塞尔路径,然后绘制线到每个后续点,最后返回到第一个点。这将为您提供一个考虑二维码失真的四边形。

这里,CATTransferM3Drotate可能是您的朋友


这可能是一个很好的起点。

我找到了一个解决方案:AGGeometryKit做到了:


谢谢大家的帮助

不清楚你在问什么。当手机与正在扫描的二维码平面不完全平行时,您是否试图处理视差失真?(有时被称为“keystone”效应。)你想在二维码周围画4条线,这4条线与二维码具有相同的透视失真,还是想变换二维码的图像,使其再次看起来方形?我刚刚更新了我的问题,使其更清晰。提前谢谢你的帮助!角点是否是
CGPoint
s?是的,它是一个
CGPoint
的数组,这是可行的,但这不会改变视图:(为什么需要改变视图?因为我后来想将其应用到ImageView-总结一下:我想把ImageView塑造成与二维码相同的形状。很容易“photoshop扭曲”或“四角扭曲”或者在iOS中“透视倾斜”一个矩形。两个关键的QA是这一个,这一个希望有帮助!