5

iPad アプリを使用して印刷を設定しようとしています。[印刷] をクリックすると、そのすべての内容を含むビューが印刷されます。これが私が試したことです(オンラインのいくつかの例からまとめました):

// This is the View I want to print
// Just a 200x200 blue square
var testView = UIView(frame: CGRectMake(0, 0, 200, 200))
testView.backgroundColor = UIColor.blueColor()

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
// This is where I was thinking the print job got the
// contents to print to the page??
printController?.printFormatter = testView.viewPrintFormatter()

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

ただし、UIWebView、UITextView、および MKMapView でのみ使用できるこちらも読みましたが、正しいですか?viewPrintFormatter

これで(プリンターシミュレーターを使用して)印刷すると、空のページが表示されます。さまざまなプリンター/用紙サイズで試しました。

どんなガイダンスも大歓迎です!

4

2 に答える 2

9

これが適切な方法かどうかはわかりませんが、ビューを に変換してからUIImage、印刷コントローラーの として設定することで解決しましたprintingItem

更新されたコード:

// This is the View I want to print
// Just a 200x200 blue square
var testView = UIView(frame: CGRectMake(0, 0, 200, 200))
testView.backgroundColor = UIColor.blueColor()

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 = testView!.toImage()

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

このtoImage()メソッドは UIView の拡張です。

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

        drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)

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

誰かが持っている場合は、代替アプローチを受け入れてください!

于 2015-09-08T16:52:10.997 に答える