2015-12-10 11 views
9

Sto sviluppando un'applicazione che richiede che i pass dei visitatori vengano generati e stampati direttamente da un iPad su AirPrint.Stampa della vista in iOS con Swift

Ho cercato ovunque per scoprire come stampare una vista, ma posso solo trovare come stampare testo, webKit e mapKit.

C'è un modo per stampare un'intera vista? In caso contrario, quale sarebbe una buona soluzione per stampare un pass visitatore che sarà testo, scatole e una fotografia. Grazie.

+0

dispiace il mio vecchio iPad1 non mi ha lasciato un commento sul solo una risposta. Il mio commento è stato: hai trovato una soluzione? Sto cercando lo stesso anche con un codice QR? All'inizio mi piace usare la mia app ipad come dispositivo di input e avere una rete pc locale per cercare i dati e stampare il badge/pass? Penso che un modo più veloce sarebbe avere il layout di stampa creato nella mia app in base ai dati del database? Magari creare un pdf pass/badge con un qrcode e stamparlo? – alex

risposta

6

ho trovato la risposta alla mia domanda modificando il codice trovato qui: AirPrint contents of a UIView

//create an extension to covert the view to an image 
extension UIView { 
func toImage() -> UIImage { 
    UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale) 

    drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true) 

    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image 
} 
} 

//In your view controller  
@IBAction func printButton(sender: AnyObject) { 

    let printInfo = UIPrintInfo(dictionary:nil) 
    printInfo.outputType = UIPrintInfoOutputType.General 
    printInfo.jobName = "My Print Job" 

    // Set up print controller 
    let printController = UIPrintInteractionController.sharedPrintController() 
    printController.printInfo = printInfo 

    // Assign a UIImage version of my UIView as a printing iten 
    printController.printingItem = self.view.toImage() 

    // Do it 
    printController.presentFromRect(self.view.frame, inView: self.view, animated: true, completionHandler: nil) 
} 
3

credo che bisogna guardare stampa fotografica codice di esempio con Swift: https://developer.apple.com/library/ios/samplecode/PrintPhoto/Introduction/Intro.html

Che cosa è esattamente la vostra vista, ImageView o UIView? Se sei interessato a imageView o UIImage, Print Photo sample di Apple fa per te. Se il soggetto è UIView è possibile creare un contesto pdf da view.layers e inviare a funzioni di AirPrint come WebKit, testo o è possibile stampare per creare dati PDF.

La soluzione migliore è creare file PDF viene qui per rapida Generate PDF with Swift

Stampa file pdf è per una rapida attuazione:

var pdfLoc = NSURL(fileURLWithPath:yourPdfFilePath) 
let printController = UIPrintInteractionController.sharedPrintController()! 
let printInfo = UIPrintInfo(dictionary:nil)! 

printInfo.outputType = UIPrintInfoOutputType.General 
printInfo.jobName = "print Job" 
printController.printInfo = printInfo 
printController.printingItem = pdfLoc 
printController.presentFromBarButtonItem(printButton, animated: true, completionHandler: nil) 
+2

Se questa domanda è contrassegnata da [tag: swift], perché fornire un'implementazione Objective-C? – JAL

+0

Perché non ho familiarità con swift molto bene, ho modificato la mia risposta. – furkan

+0

Grazie, probabilmente sarebbe un UIView. Ho esaminato le soluzioni sopra, ma non sono sicuro che l'opzione PDF sia la migliore. Penso che la cosa migliore da fare sia creare il pass HTML per i visitatori e quindi stampare la vista web. Ti farò sapere come vado. –

1

Hier in 3.x Swift

func prt() { 

     let printInfo = UIPrintInfo(dictionary:nil) 
     printInfo.outputType = UIPrintInfoOutputType.general 
     printInfo.jobName = "My Print Job" 

     // Set up print controller 
     let printController = UIPrintInteractionController.shared 
     printController.printInfo = printInfo 

     // Assign a UIImage version of my UIView as a printing iten 
     printController.printingItem = self.view.toImage() 

     // Do it 
     printController.present(from: self.view.frame, in: self.view, animated: true, completionHandler: nil) 

    } 

}

extension UIView { 
    func toImage() -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale) 

     drawHierarchy(in: self.bounds, afterScreenUpdates: true) 

     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image! 
    } 
}