【问题标题】:Set corners of UIView (iOS)设置 UIView 的角(iOS)
【发布时间】:2016-03-25 14:04:40
【问题描述】:

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

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

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

提前非常感谢!

更新: 在这里你可以看到问题:红色框是一个 UIView,它的frame 属性设置为二维码bounds 属性。这错过了视角。我想将 UIView(红色框)转换为跟随二维码的corners 属性,包括二维码的右上角、左上角、右下角和左下角(CGPoint)。将它应用到 UIView 很重要,因为我稍后想将它应用到 ImageView。遮罩也不可用,因为它只是隐藏了视图的一部分,但不会拉伸或变换视图的内容。

【问题讨论】:

  • 不清楚你在问什么。当手机与您正在扫描的二维码平面不完全平行时,您是否正在尝试处理您得到的视差失真? (有时称为“梯形失真”效果。)您是想在 QR 码周围绘制 4 条具有与 QR 码相同的透视变形的线,还是要转换 QR 码的图像使其看起来是方形的再来一次?
  • 我刚刚更新了我的问题以使其更清楚。提前感谢您的帮助!
  • 是角落的CGPoints吗?
  • 是的,这是CGPoint的数组

标签: ios swift uiview avfoundation


【解决方案1】:

我找到了解决方案:AGGeometryKit 成功了:https://github.com/hfossli/AGGeometryKit/

感谢大家的帮助!

【讨论】:

    【解决方案2】:

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

    您可以做的是使用 qrCodeObject 的点绘制一个多边形。

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

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

    This answer 如果您需要有关如何操作的更多指导,请提供指导。

    【讨论】:

    • 在 iOS 中“photoshop-distort”或“四角倾斜”或“透视倾斜”矩形是“容易”的 .. 两个关键的 QA 是这个stackoverflow.com/a/2352402/294884 和这个@ 987654323@希望对你有帮助!
    【解决方案3】:

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

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

    【讨论】:

    • 是的,这可行,但这不会改变视图:(
    • 为什么需要变换视图?
    • 因为我以后想把它应用到一个ImageView上——总结一下:我想把ImageView塑造成和二维码一样的形状。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2012-04-27
      • 2021-06-03
      • 2014-10-26
      相关资源
      最近更新 更多