MKMapSnapshotOptions:添加Custom Pin Annotation View或UIView的快照

时间:2015-08-20 15:01:37

标签: ios objective-c swift mkmapsnapshotter

我正在尝试使用MKMapSnapshotter的startWithCompletionHandler方法获取地图视图的快照。我想将自定义图钉注释视图添加到快照。并且我的自定义注释视图中有一个标签。所以当我正在拍摄快照时,我无法显示该标签。 这是代码:

{{1}}

你可以看到drawAtPoint是UIImage的功能。我尝试使用UIImageView然后我将标签添加到imageView作为subView但我不能使用drawView与imageView,所以我的问题是我无法添加标签到mapView快照。

你可以在链接上看到我的意思: https://www.dropbox.com/s/83hnkiqi87uy5ab/map.png?dl=0

感谢您的建议。

1 个答案:

答案 0 :(得分:11)

创建自定义AnnotationView类。当您创建MKMapSnapshotter时,使用坐标和标题定义MKPointAnnotation。之后,从Custom Class定义annotationView。您可以使用MKPointAnnotation初始化自定义annotationView。并使用drawViewHierarchyInRect方法而不是drawAtPoint。

您的代码必须是这样的。

    let snapshotter = MKMapSnapshotter(options: options)
    snapshotter.startWithCompletionHandler() {
        snapshot, error in

        if error != nil {
            completion(image: nil, error: error)
            return
        }

        let image = snapshot.image
        var annotation = MKPointAnnotation()
        annotation.coordinate = coordinates[0]
        annotation.title = "Your Title"

        let annotationView = CustomAnnotationView(annotation: annotation, reuseIdentifier: "annotation")
        let pinImage = annotationView.image

        UIGraphicsBeginImageContextWithOptions(image.size, true, image.scale);

        image.drawAtPoint(CGPointMake(0, 0)) //map

//            pinImage!.drawAtPoint(snapshot.pointForCoordinate(coordinates[0]))                        

       annotationView.drawViewHierarchyInRect(CGRectMake(snapshot.pointForCoordinate(coordinates[0]).x, snapshot.pointForCoordinate(coordinates[0]).y, annotationView.frame.size.width, annotationView.frame.size.height), afterScreenUpdates: true)


        let finalImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        completion(image: finalImage, error: nil)
    }