Перетащите и измените прямоугольник, нарисованный с помощью UIBezierPath IOS / Swift

Я разрабатываю программу, которая идентифицирует прямоугольник на изображении и рисует путь на границе этого идентифицированного прямоугольника. Теперь я хочу переместить этот путь, если он не находится в точном положении. Для примера посмотрите на это изображение

введите описание изображения здесь

В таких случаях мне нужно перетащить углы контура и переместить его, чтобы он соответствовал прямоугольнику.

Чтобы нарисовать путь, я использовал 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. Но как я заметил, ничего подобного нет. Не удалось найти ничего по этому поводу. Так может кто-нибудь, пожалуйста, дайте мне знать, как выполнить мою работу. Любая помощь будет высоко ценится.


person GMHSJ    schedule 09.03.2016    source источник


Ответы (1)


Вы правы, что нет возможности прикрепить распознаватель жестов к UIBezierPath. Распознаватели жестов прикрепляются к UIView объектам, а UIBezierPath не является объектом просмотра.

Для этого нет встроенного механизма. Это нужно делать самому. Я бы предложил создать семейство классов, чтобы справиться с этим. Создайте класс прямоугольного представления. Он будет использовать внутреннюю траекторию Безье, а также разместить 4 вида угловых точек на вершинах и установить распознаватели жестов панорамирования для каждого вида угловой точки.

Обратите внимание, что прямоугольники какао (CGRects) не могут быть повернуты. Вам нужно будет использовать серию соединенных сегментов линии и написать логику, которая заставит его оставаться квадратным.

person Duncan C    schedule 09.03.2016
comment
Спасибо за предложение, Дункан. Я это попробую. Кстати, еще раз спасибо за быстрый ответ и извините за то, что опоздали с ответом. ваше здоровье - person GMHSJ; 18.03.2016