2016-03-09 2 views
0

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

enter image description here

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

Чтобы нарисовать путь, я использовал 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) не могут быть повернуты. Вам нужно будет использовать ряд связанных сегментов линии и написать логику, которая заставит ее оставаться квадратной.

+0

Спасибо за предложение Duncan. Я это попробую. btw Еще раз спасибо за быстрый ответ и жаль, что опоздал, чтобы ответить на ваш ответ. ура – GMHSJ

Смежные вопросы