我正在尝试了解如何使用SWIFT在IOS地图上叠加图像。我创建了以下代码,使用地图工具包覆盖地图上的绿色圆圈。我想用矩形图像替换绿色圆圈tOver.png 500,500我是iOS开发新手并且很快。到目前为止,我找不到一个快速的例子或好的资源。
//
// ViewController.swift
// mapoverlaytest
//
import UIKit
import MapKit
class ViewController: UIViewController,MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
self.mapView.delegate = self;
let location = CLLocationCoordinate2D(
latitude: 51.50007773,
longitude: -0.1246402
)
let span = MKCoordinateSpanMake(0.05, 0.05)
let region = MKCoordinateRegion(center: location, span: span)
mapView.setRegion(region, animated: true)
let annotation = MKPointAnnotation()
annotation.setCoordinate(location)
annotation.title = "Big Ben"
annotation.subtitle = "London"
var overlay = MKCircle (centerCoordinate: location, radius: 500)
mapView.addOverlay(overlay)
mapView.addAnnotation(annotation)
}
func mapView(
mapView: MKMapView!, rendererForOverlay
overlay: MKOverlay!) -> MKOverlayRenderer! {
if (overlay.isKindOfClass(MKCircle))
{
var circleRenderer = MKCircleRenderer(overlay: overlay)
circleRenderer.strokeColor = UIColor.greenColor()
circleRenderer.fillColor = UIColor(
red: 0,
green: 1.0,
blue: 0,
alpha: 0.5)
return circleRenderer
}
return nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:4)
正如Totem解释的那样,如果符合您的目的,使用图像注释而不是叠加会更简单。但是,根据您要使用此图像的内容,它可能无法正常工作。地图叠加和地图注释之间的主要区别在于,当您缩放地图(如图钉)时,注释会保持相同的大小,并且叠加会随着地图的大小而变化(如标记建筑物)。如果您希望图像使用地图进行缩放,则会更加复杂。
您需要创建一个新的MKOverlayRenderer子类来绘制图像。您必须通过继承drawMapRect(mapRect,zoomScale,inContext)函数将图像自己绘制到图像上下文中。在创建这个子类之后,你可以在自定义子类中替换MKCircleRenderer,你应该好好去。
Raywenderlich.com上有一篇非常好的文章,您一定要查看。它应该引导您完成您需要知道的一切。
答案 1 :(得分:0)
您应该实现
,而不是rendererForOverlayfunc mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!
在那里,构建你的MKAnnotationView并在返回它之前设置它的image属性。查看https://developer.apple.com/LIBRARY/ios/documentation/MapKit/Reference/MKAnnotationView_Class/index.html以获取有关MKAnnotationView类的更多信息。