2016-12-02 2 views
3

Я создал приложение на основе PDF. Во-первых, я получаю PDF из каталога документов, а затем конвертирую его в Изображения, а затем программно устанавливаю все изображения по вертикали, используя UIImageView & ScrollView.Аннотации (изображение и текст) subviews меняет положение после сохранения

Затем я установил разные типы аннотаций, такие как 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 
} 
Смежные вопросы