拖动并缩放使用 UIBezierPath IOS/Swift 绘制的矩形
Posted
技术标签:
【中文标题】拖动并缩放使用 UIBezierPath IOS/Swift 绘制的矩形【英文标题】:Drag and sacale a rectangle drawn using UIBezierPath IOS/Swift 【发布时间】:2016-03-09 11:16:37 【问题描述】:我正在开发一个程序,它可以识别图像中的一个矩形,并在该识别的矩形的边界上绘制一条路径。现在我想重新定位该路径,以防它不在确切位置。例如看这张图片
在这种情况下,我需要拖动路径的角并将其重新定位为适合矩形。
为了绘制路径,我使用了 CAShapeLayer 和 UIBezierPath。这是我用来绘制路径的代码。
// imgView is the UIImageView which contains the image with the rectangle
let line: CAShapeLayer = CAShapeLayer();
line.frame = imgView.bounds;
let linePath: UIBezierPath = UIBezierPath();
linePath.moveToPoint(CGPointMake(x1, y1);
linePath.addLineToPoint(CGPointMake(x2, y2);
linePath.addLineToPoint(CGPointMake(x3, y3);
linePath.addLineToPoint(CGPointMake(x4, y4);
linePath.addLineToPoint(CGPointMake(x1, y1);
linePath.closePath();
line.lineWidth = 5.0;
line.path = linePath.CGPath;
line.fillColor = UIColor.clearColor().CGColor;
line.strokeColor = UIColor.blueColor().CGColor;
imgView.layer.addSublayer(line);
问题是我试图向 UIBezierPath 添加一个手势。但我注意到没有这样的事情。找不到任何关于此的内容。所以有人可以让我知道一种方法来完成我的工作。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您是对的,没有办法将手势识别器附加到UIBezierPath
。手势识别器附加到UIView
对象,UIBezierPath
不是视图对象。
没有内置机制可以做到这一点。你需要自己做。我建议建立一个类家族来处理它。创建一个矩形视图类。它将在内部使用贝塞尔路径,并在顶点上放置 4 个角点视图,并为每个角点视图安装平移手势识别器。
请注意,Cocoa 矩形 (CGRects) 不能旋转。您需要使用一系列相连的线段并编写逻辑使其保持方形。
【讨论】:
感谢邓肯的建议。我会试试看。顺便说一句,再次感谢您的快速回复,很抱歉迟到回复您的回答。欢呼以上是关于拖动并缩放使用 UIBezierPath IOS/Swift 绘制的矩形的主要内容,如果未能解决你的问题,请参考以下文章