如何在pdfkit swift中添加圆形注释?

Posted

技术标签:

【中文标题】如何在pdfkit swift中添加圆形注释?【英文标题】:How to add circle annotation in pdfkit swift? 【发布时间】:2018-12-14 07:52:19 【问题描述】:

我正在使用 pdfkit 并添加了具有固定大小和宽度的圆形注释,但我想使用动态高度和宽度进行绘制。这是我的代码:

这里:start 是我的 CGPoint 从我开始手指的位置 end 是我结束移动手指的第二个 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 种情况:

    手指从左向右滑动 - 它会在正确的位置绘制圆圈。 手指从右向左滑动 - 它在正确的位置绘制圆圈。 手指从左上角滑到右下角 - 画出一半大小的圆圈 手指从右下角滑到左上角 - 画出一半大小的圆 手指从上到下滑动 - 圆半径值为 2 或 3 宽度和高度 手指从下向上滑动 - 圆的半径值为 2 或 3 宽度和高度 手指从右上角滑到左下角 - 画出一半大小的圆圈 手指从左下角滑到右上角 - 画出一半大小的圆圈

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于如何在pdfkit swift中添加圆形注释?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS、PDFKit、swift 中获取 pdf 页面的准确 X 和 Y 原点值

PDFKit iOS 11:如何更改Ink注释的线宽?

使用 Swift 5 - PDFKit 在 iOS 中编辑和保存现有的 pdf 文档

使用 PDFKIt iOS 11 创建 PDF 注释

如何覆盖 PDFAnnotation IOS-PDFKIT 上的绘制方法

PDFKit 和 PDFDocument 注释在 Adob​​e Acrobat 中不可见