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