2014-08-28 81 views
2

发送MKMapView a -print:消息会导致只包含+/-按钮和“合法”链接的输出。同样如果我尝试[NSPrintOperation printOperationWithView:someMKMapView][theWindowThatContainsAMapView print][[NSPrintOperation PDFOperationWithView:someMKMapView insideRect:someMKMapView.bounds toPath:@"foo.pdf" printInfo:nil] runOperation]如何在OS X中打印MKMapView?

苹果自己的Maps.app打印地图,顺便说一句。

有没有人设法打印MKMapView?

+0

你有没有想出解决办法? – ebrts 2015-06-26 16:17:25

回答

3

魔术类是MKMapSnapshotter

假设有一个MKMapView实例mapView,这是一个简单的例子来创建的MKMapView的当前内容作为写入夫特TIFF文件的图像。 此图像可打印。

let options = MKMapSnapshotOptions() 
options.region = mapView.region; 
options.size = mapView.frame.size; 

let fileURL = NSURL(fileURLWithPath:"/path/to/snapshot.tif") 
let mapSnapshotter = MKMapSnapshotter(options: options) 
mapSnapshotter.startWithCompletionHandler { (snapshot, error) -> Void in 
    // do error handling 
    let image = snapshot.image 
    if let data = image.TIFFRepresentation { 
    data.writeToURL(fileURL!, atomically:true) 
    } else { 
    println("could not create TIFF data") 
    } 
} 

编辑:

与打印,而不是创建一个文件

let options = MKMapSnapshotOptions() 
options.region = mapView.region; 
options.size = mapView.frame.size; 

let mapSnapshotter = MKMapSnapshotter(options: options) 
mapSnapshotter.startWithCompletionHandler { (snapshot, error) -> Void in 
    // do error handling 
    let image = snapshot.image 
    let imageView = NSImageView() 
    imageView.frame = NSRect(origin: NSZeroPoint, size: image.size) 
    imageView.image = image 

    let info = NSPrintInfo.sharedPrintInfo() 
    info.horizontalPagination = .FitPagination 
    info.verticalPagination = .FitPagination 
    let operation = NSPrintOperation(view: imageView, printInfo:info) 
    operation.showsPrintPanel = true 
    operation.runOperation() 
+0

值得注意的是:“快照图像不包括您的应用添加到地图视图的任何自定义叠加层或注释,如果您希望您的注释和叠加层出现在最终图像上,则必须自己绘制它们。这些项目正确地在图像上,使用此类的pointForCoordinate:方法将覆盖图或注释坐标值转换为图像坐标空间内的适当位置。“ – ebrts 2015-07-02 18:05:03

+2

请阅读:http://nshipster.com/mktileoverlay-mkmapsnapshotter-mkdirections/ – vadian 2015-07-02 18:05:25