Рисование прямоугольников с использованием системы координат CGPoint - SWIFT - PullRequest
0 голосов
/ 15 мая 2018

Я могу нарисовать прямоугольник, используя код ниже (работает).Тем не менее, я использую инфраструктуру Vison для обнаружения прямоугольников, но она возвращает мне значения CGPoint, которые меньше 1,0.Когда я ввожу эти координаты, чтобы нарисовать прямоугольник, я ничего не получаю обратно.Пожалуйста, можете посоветовать?

Работает - я получаю прямоугольник

    let rectangle = UIBezierPath.init()

    rectangle.move(to: CGPoint.init(x: 100, y: 100))
    rectangle.addLine(to: CGPoint.init(x: 200, y: 130))
    rectangle.addLine(to: CGPoint.init(x: 300, y: 400))
    rectangle.addLine(to: CGPoint.init(x: 100, y: 500))

    rectangle.close()

    let rec = CAShapeLayer.init()
    rec.path = rectangle.cgPath
    rec.fillColor = UIColor.red.cgColor
    self.view.layer.addSublayer(rec)

Не работает (без прямоугольника):

    let rectangle = UIBezierPath.init()

    rectangle.move(to: CGPoint.init(x: 0.154599294066429, y: 0.904223263263702))

    rectangle.addLine(to: CGPoint.init(x: 0.8810795545578, y: 0.970198452472687))
    rectangle.addLine(to: CGPoint.init(x: 0.16680309176445, y: 0.0157230049371719))
    rectangle.addLine(to: CGPoint.init(x: 0.878569722175598, y: 0.128135353326797))

    rectangle.close()

    let rec = CAShapeLayer.init()
    rec.path = rectangle.cgPath
    rec.fillColor = UIColor.red.cgColor
    self.view.layer.addSublayer(rec)

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Точки, возвращаемые каркасом Vision, представляют собой координаты, представленные в процентах от полного размера области просмотра.Если ваш видовой экран имеет размер 640 x 480 (например), то ваша первая точка - CGPoint(x: 0.154599294066429 * 640, y: 0.904223263263702 * 480).Принимая это во внимание, измените ваш код на что-то вроде этого, и все должно быть в порядке:

let rectangle = UIBezierPath.init()
let width = // your width - Maybe UIScreen.main.bounds.size.width ?
let height = // your height - Maybe UIScreen.main.bounds.size.height ?

rectangle.move(to: CGPoint.init(x: width  * 0.154599294066429, y: height * 0.904223263263702))

rectangle.addLine(to: CGPoint.init(x: width * 0.8810795545578, y: height * 0.970198452472687))
rectangle.addLine(to: CGPoint.init(x: width * 0.16680309176445, y: height * 0.0157230049371719))
rectangle.addLine(to: CGPoint.init(x: width * 0.878569722175598, y: height * 0.128135353326797))

rectangle.close()

let rec = CAShapeLayer.init()
rec.path = rectangle.cgPath
rec.fillColor = UIColor.red.cgColor
self.view.layer.addSublayer(rec)
0 голосов
/ 15 мая 2018

Давайте просто проанализируем, что у вас здесь. В первом примере вы рисуете прямоугольник размером примерно 200 на 400 пикселей, иш ... Конечно, это будет отображаться точно так, как вы ожидаете.

Во втором примере вы рисуете прямоугольник размером примерно 0,7 на 0,8 пикселя, иш. Теперь подумайте об этом логически, как экран должен представлять 0,7 пикселя? Это не может! Пиксель - это самое маленькое представление, которое вы можете иметь, то есть один цветной квадрат.

Код не работает из-за физических ограничений экрана / системы. Вам нужно использовать значения размера (и положения) больше 1, чтобы увидеть прямоугольник. Каркас Vision ничем не отличается, он будет видеть только то, что вы можете видеть, если это имеет смысл.

...