2016-12-02 59 views
3

我创建了一个基于PDF的应用程序。首先,我从文档目录中获取PDF,然后将其转换为Images,然后通过使用UIImageView & ScrollView以编程方式将所有图像设置为垂直。注解(图像和文本)子视图在保存后更改位置

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

屏幕1:原始图像大小转换为的UIImageView尺寸与方面,以适应(因为我有像这种类型的屏幕)当我有原稿尺寸当时转换为屏幕大小我已存储的图像原来的大小和其用于当我有图像转换成PDF添加注释后,在寻找屏幕2.

enter image description here

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

enter image description here

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) 
} 
+1

显示一些代码,你如何放置注释在图像? –

+0

通过使用addSubView。 getUIImageView.addSubview(gestureView)// gestureView是UIView,GetUIImageView是UIImageView。 – Rock

+0

在您的问题中添加代码,您添加的代码越多,对读者来说就越有帮助。 –

回答

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 
}