MKMapSnapshotOptions : 添加自定义 Pin 注释视图或 UIView 的快照
MKMapSnapshotOptions : Adding snapshot of Custom Pin Annotation View or UIView
我正在尝试使用 MKMapSnapshotter 的 startWithCompletionHandler 方法获取地图视图的快照。我想将自定义 Pin 注释视图添加到快照中。并且在我的自定义注释视图中有一个标签。所以我在获取快照时无法显示该标签。
这是代码:
let snapshotter = MKMapSnapshotter(options: options)
snapshotter.startWithCompletionHandler() {
snapshot, error in
if error != nil {
completion(image: nil, error: error)
return
}
let image = snapshot.image
let pin = MKPinAnnotationView(annotation: nil, reuseIdentifier: "") // I want to use custom annotation view instead of MKPinAnnotationView
let pinImage = UIImage(named: "pinImage")
UIGraphicsBeginImageContextWithOptions(image.size, true, image.scale);
image.drawAtPoint(CGPointMake(0, 0))
var homePoint = snapshot.pointForCoordinate(coordinates[0])
pinImage!.drawAtPoint(homePoint)
pinImage!.drawAtPoint(snapshot.pointForCoordinate(coordinates[1]))
let finalImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
completion(image: finalImage, error: nil)
}
如你所见,drawAtPoint 是 UIImage 的函数。我尝试使用 UIImageView,然后我将标签添加到 imageView 作为子视图,但我不能将 drawAtPoint 与 imageView 一起使用,所以我的问题是我无法将标签添加到 mapView 快照。
你可以在 link 明白我的意思:
https://www.dropbox.com/s/83hnkiqi87uy5ab/map.png?dl=0
感谢您的建议。
创建自定义 AnnotationView Class.When 你创建 MKMapSnapshotter 用坐标定义 MKPointAnnotation 和 title.After 从你的自定义定义 annotationView Class.You 可以用 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)
}
我正在尝试使用 MKMapSnapshotter 的 startWithCompletionHandler 方法获取地图视图的快照。我想将自定义 Pin 注释视图添加到快照中。并且在我的自定义注释视图中有一个标签。所以我在获取快照时无法显示该标签。 这是代码:
let snapshotter = MKMapSnapshotter(options: options)
snapshotter.startWithCompletionHandler() {
snapshot, error in
if error != nil {
completion(image: nil, error: error)
return
}
let image = snapshot.image
let pin = MKPinAnnotationView(annotation: nil, reuseIdentifier: "") // I want to use custom annotation view instead of MKPinAnnotationView
let pinImage = UIImage(named: "pinImage")
UIGraphicsBeginImageContextWithOptions(image.size, true, image.scale);
image.drawAtPoint(CGPointMake(0, 0))
var homePoint = snapshot.pointForCoordinate(coordinates[0])
pinImage!.drawAtPoint(homePoint)
pinImage!.drawAtPoint(snapshot.pointForCoordinate(coordinates[1]))
let finalImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
completion(image: finalImage, error: nil)
}
如你所见,drawAtPoint 是 UIImage 的函数。我尝试使用 UIImageView,然后我将标签添加到 imageView 作为子视图,但我不能将 drawAtPoint 与 imageView 一起使用,所以我的问题是我无法将标签添加到 mapView 快照。
你可以在 link 明白我的意思: https://www.dropbox.com/s/83hnkiqi87uy5ab/map.png?dl=0
感谢您的建议。
创建自定义 AnnotationView Class.When 你创建 MKMapSnapshotter 用坐标定义 MKPointAnnotation 和 title.After 从你的自定义定义 annotationView Class.You 可以用 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)
}