3

我创建了一个基于 PDF 的应用程序。首先,我从文档目录中获取 PDF,然后将其转换为图像,然后使用UIImageView&以编程方式将所有图像设置为垂直ScrollView

然后我设置了不同类型的注释sign,例如text等。当我将其定稿为图像并将它们转换为 PDF 时效果很好。我得到不同的结果,如下图所示。

屏幕 1:当我将原始尺寸转换为屏幕尺寸时,将原始图像尺寸转换为 UIImageView 尺寸以适应宽高比(因为我看起来像这种类型的屏幕)当时我已经存储了图像原始尺寸,并且它习惯于当我有在屏幕 2 中添加注释后将图像转换为 pdf。

在此处输入图像描述

屏幕 2.当我完成或转换为 pdf 时。结果在屏幕 2 中查看,更改注释或标志位置。

在此处输入图像描述

let drawImage = jotViewController.renderImage() //sign image
signImg = drawImage
gestureView = UIView(frame: CGRect(x: 50, y: 300, width: 200, height: 110))

counter = counter + 1
gestureView.tag = counter

annotationImg = UIImageView(frame: CGRect(x: 0, y: 0, width:170, height: 80))
annotationImg.image = signImg
annotationImg.layer.cornerRadius = 5.0
// gestureView.frame = annotationImg.frame

cancelBtn.frame = CGRect(x: (annotationImg.frame.minX-10), y: (annotationImg.frame.maxY-10), width: 20, height: 20)
cancelBtn.setImage(#imageLiteral(resourceName: "cancel.png"), for: .normal)
cancelBtn.addTarget(self, action: #selector(cancelBtnAction), for: .touchUpInside)
gestureView.addSubview(cancelBtn)


zoomBtn.frame = CGRect(x: (annotationImg.frame.width-10), y: (annotationImg.frame.height-10), width: 20, height: 20)
zoomBtn.setImage(#imageLiteral(resourceName: "zoom.png"), for: .normal)
gestureView.addSubview(zoomBtn)

let zoomBtnpanGesture: UIPanGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(ViewController.zoomBtnPanGesture(_:)))
zoomBtnpanGesture.minimumNumberOfTouches = 1
zoomBtnpanGesture.maximumNumberOfTouches = 1
zoomBtn.addGestureRecognizer(zoomBtnpanGesture)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handlePanGesture))
panGesture.minimumNumberOfTouches = 1
panGesture.maximumNumberOfTouches = 1
annotationImg.backgroundColor = UIColor.lightGray.withAlphaComponent(0.5)

gestureView.addGestureRecognizer(panGesture)
annotationImg.clipsToBounds = true

gestureView.addSubview(annotationImg)

for getUIImageView in pdfUIImageViewArr {
    if tag==0 {
        let alert = UIAlertController(title: "Alert!!", message: "Please Select Signature Page.", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        present(alert, animated: true, completion: nil)
    }

    if getUIImageView.tag == tag && tag != 0 {
        getUIImageView.addSubview(gestureView)


    }
}

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(gestureViewTapped(sender:)))
tapGesture.numberOfTapsRequired = 1
gestureView.addGestureRecognizer(tapGesture)

imageViewArr.append(annotationImg)
gestureViewArr.append(gestureView)
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")

@IBAction func storeAsPdfAction(_ sender: AnyObject) {
    self.storeToDocumentDir()

    let userObj = self.storyboard?.instantiateViewController(withIdentifier: "DocumentVC") as? DocumentVC
    self.navigationController?.pushViewController(userObj!, animated: true)
}

func storeToDocumentDir(){
    print(pdfImage.frame)
    print(view.frame)
    print(gestureView.frame)
    for getTextViewLbl in textViewLabelArr{
        getTextViewLbl.backgroundColor = UIColor.clear
    }

    gestureViewArr.removeFirst()
    for gestureView in gestureViewArr {

        print(gestureView.frame)

        zoomBtn.isHidden = true
        cancelBtn.isHidden = true

        //  pdfImage.addSubview(gestureView)
    }


    pdfUIImageViewArr.remove(at: 0)
    var i = 1

    for getPDFImage in pdfUIImageViewArr {
        getPDFImage.frame = CGRect(x: 0, y: 0, width: pdfImage.frame.size.width, height: pdfImage.frame.size.height)

        getPDFImage.frame = CGRect(x: 0, y: 0, width: pageRect.size.width, height: pageRect.size.height)
        getPDFImage.contentMode = UIViewContentMode.scaleToFill
        //
        let getImage = self.imageWithView(getPDFImage)

        let fileManager = FileManager.default
        let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("img\(i).jpg")
        i += 1
        let image = getImage
        print(paths)

        let imageData = UIImageJPEGRepresentation(image, 0.5)
        fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)

        setPdfImgArr.append(getImage)
    }

    self.createPdfFromView(pdfImage, imageArrAdd: setPdfImgArr, saveToDocumentsWithFileName: "\((setFileName)!)")

    let pdfUrl = URL(fileURLWithPath:documentsFileName)
    self.setImagesInScrollView(pdfUrl)
}
4

1 回答 1

1

解决的问题:通过使用 UIScrollView 缩放:

 override func viewWillLayoutSubviews() {
    self.configureZoomScale()
}
func configureZoomScale() {
    var xZoomScale: CGFloat = self.scrollView.bounds.size.width / self.pdfImage.bounds.size.width
    var yZoomScale: CGFloat = self.scrollView.bounds.size.height / self.pdfImage.bounds.size.height
    var minZoomScale: CGFloat = min(xZoomScale, yZoomScale)
    //set minimumZoomScale to the minimum zoom scale we calculated
    //this mean that the image cant me smaller than full screen
    self.scrollView.minimumZoomScale = minZoomScale
    //allow up to 4x zoom
    self.scrollView.maximumZoomScale = 4
    //set the starting zoom scale
    self.scrollView.zoomScale = minZoomScale
}
func viewForZooming(in scrollView: UIScrollView) -> UIView?{

    return pdfFinalImage
}
于 2016-12-03T07:25:39.920 回答