Как добавить круговую аннотацию в pdfkit swift?

Я использую pdfkit и добавил круговую аннотацию с фиксированным размером и шириной, но я хочу рисовать с динамической высотой и шириной. Вот мой код:

Здесь: начало — это моя CGPoint, с которой я начал движение пальца, конец — это вторая CGPoint, где я закончил движение пальца. Используется start.x и end.y

  let circle = PDFAnnotation(bounds: CGRect(x: start.x, y: end.y, width: 100, height: 100), forType: .circle, withProperties: nil)
  circle.color = hexStringToUIColor(hex: "#0000FF")

  let border = PDFBorder()
  border.lineWidth = 3.0
  circle.border = border
  page?.addAnnotation(circle)

Это второй подход к рисованию круга с динамической высотой и шириной:

Вот код:

    let centerX = (start!.x + end!.x)/2

    let centerY = (start!.y + end!.y)/2

    var distance = (end!.x - centerX) * 2

    if distance < 0 {

         distance = (start!.x - centerX) * 2

    }

    let halfDistance = distance/2

    self.annotation = PDFAnnotation(bounds: CGRect(x: centerX - halfDistance, y: centerY - halfDistance, width: distance, height: distance), forType: .circle, withProperties: nil)

    let page = self.pdfview.currentPage

    annotation.color = hexStringToUIColor(hex: "#0000FF")

    let border = PDFBorder()
    border.lineWidth = 3.0
    annotation.border = border
    page?.addAnnotation(annotation)

Второй подход рисует круг с динамической высотой и шириной, но не так, как я хочу. если я нарисую круг, их будет 8 случаев:

  1. Палец провел слева направо - он рисует круг в правильном положении.
  2. Палец провел справа налево - он рисует круг в правильном положении.
  3. Проведите пальцем сверху слева вниз справа — он нарисует круг вдвое меньшего размера.
  4. Проведите пальцем снизу справа вверх влево — он нарисует круг вдвое меньшего размера.
  5. Проведите пальцем сверху вниз — значение радиуса круга равно 2 или 3 ширине и высоте
  6. Проведите пальцем снизу вверх — значение радиуса круга равно 2 или 3 ширине и высоте
  7. Проведите пальцем сверху справа вниз слева — он нарисует круг вдвое меньшего размера.
  8. Проведите пальцем снизу слева направо вверх — он нарисует круг вдвое меньшего размера.

person Mahesh Shahane    schedule 14.12.2018    source источник


Ответы (1)


Вы можете использовать этот код, чтобы нарисовать круг над pdf-страницей

   let size = CGSize(width: abs(point.x - startPoint.x), height: abs(point.y - startPoint.y))
        var rect = CGRect(origin: startPoint, size: size)
               if point.y - startPoint.y < 0 && point.x - startPoint.x < 0
                {
                    rect = CGRect(origin: point, size: size)
                }
                else if point.y - startPoint.y > 0 && point.x - startPoint.x < 0
                {
                    rect = CGRect(origin: CGPoint(x: point.x, y: startPoint.y), size: size)
                }
                else if point.y - startPoint.y < 0 && point.x - startPoint.x > 0
                {
                    rect = CGRect(origin: CGPoint(x: startPoint.x, y: point.y), size: size)
                }
        let page = docView.currentPage
        let pageBounds = page!.bounds(for: .cropBox)
        let newAnnotation = PDFAnnotation(bounds: pageBounds, forType: .circle,withProperties:nil)
        newAnnotation.setRect(rect, forAnnotationKey: .rect)
        newAnnotation.color = UIColor.black
        page!.addAnnotation(newAnnotation)
person Faheem Rahman    schedule 18.12.2018