[第1章]地图:MapKit的简单使用——MKOverlay

一、关于

在 MapView 中添加 Overlay(覆盖层)的常用方法:

@availability(iOS, introduced=7.0)
func addOverlay(overlay: MKOverlay!, level: MKOverlayLevel)
func addOverlays(overlays: [AnyObject]!, level: MKOverlayLevel)

// The specified objects are added to the group of overlay objects in the MKOverlayLevelAboveLabels level. (level:AboveLabels)
@availability(iOS, introduced=4.0)
func addOverlay(overlay: MKOverlay!)
func addOverlays(overlays: [AnyObject]!)

MKOverlayLevel 结构体:

enum MKOverlayLevel : Int {
    case AboveRoads
    case AboveLabels
}

二、配置

1、导包

import MapKit

2、View和Controller

在Main Storyboard中添加一个 MapKit View,并在Controller中添加outlet;
Controller实现MKMapViewDelegate协议,并设置代理。

完成之后代码如下:

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 设置代理。
        mapView.delegate = self  
    }
}

三、使用

为了更好地体现出效果,使用长按地图并在触点处添加Overlay(例子用MKCircle)的方案。

// 在 MapView 上添加一个长按手势。
@IBAction func longPressAction(sender: UILongPressGestureRecognizer) {
    // 得到触屏点。
    var point = sender.locationInView(mapView)

    // 把触屏点结合mapView,转化成CLLocationCoordinate2D。(地图中的经纬度)
    var coordinate = mapView.convertPoint(point, toCoordinateFromView: mapView)

    // 实例化一个MKCircle。(中心点,半径/米)
    var circle = MKCircle(centerCoordinate: coordinate, radius: 100)

    // 添加到地图。(PS:地图并未显示覆盖层,需要实现相应的代理)
    mapView.addOverlay(circle)
}

// 添加覆盖层之后,相应的代理。
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    // MKCircleRenderer。(渲染器)
    var circleRenderer = MKCircleRenderer(circle: overlay as! MKCircle)

    // 设置属性。
    circleRenderer.fillColor = UIColor.redColor()
    circleRenderer.strokeColor = UIColor.blackColor()
    circleRenderer.alpha = 0.2

    // 返回Renderer。(在地图显示)
    return circleRenderer
}

四、结果

AboveLabels:

AboveLabels

AboveRoads:
AboveRoads

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值