• 运用swift开发已有半年之久,最近闲来... 《一》高德地图搜索功能 控制器 // // ViewController.swift // AmapSeach // // Created by yanfa-fengchuang on 16/8/15. // Copyright © 2016年

    运用swift开发已有半年之久,最近闲来没事。学习了一点地图的知识,现在来与大家分享。直接上代码吧!

     《一》高德地图搜索功能

    控制器

    //

    //  ViewController.swift

    //  AmapSeach

    //

    //  Created by yanfa-fengchuang on 16/8/15.

    //  Copyright © 2016 yanfa-fengchuang. All rights reserved.

    //


    import UIKit


    class ViewController: UIViewController,AMapSearchDelegate,AMapLocationManagerDelegate,UITableViewDelegate,UITableViewDataSource{

        

        var search:AMapSearchAPI!

        let locationManager = AMapLocationManager()

        var currentCity:String!

        var currentCityBtn:UIButton!

        var searchTF:UITextField!

        var location:CLLocation!

        var cancleBtn:UIButton!

        var CirtyArray:NSArray!

        var addressTableview:UITableView!

        var number:String!

        var poi :AMapPOI?

        var dataArray:NSMutableArray!

        var keyWord:String!

        var citiTableview:UITableView!

        

        override func viewDidLoad() {

            super.viewDidLoad()

            self.view.backgroundColor = UIColor.colorWithHex("#F6F6F6")!

            

            self.dataArray = NSMutableArray()

            //MARK:单次定位获取当前城市

            setHeardview()

            setOnceLocation()

            CirtyArray = ["江阴市","新沂市","邳州市","溧阳市","金坛市","常熟市","张家港市","昆山市","吴江市","太仓市","启东市","如皋市","通州市","海门市","东台市","大丰市","仪征市","高邮市","江都市","丹阳市","扬中市","句容市","兴化市","靖江市","泰兴市","姜堰市"]

            self.number = "0"

            setTableview()

            setCityTableview()

            

            search = AMapSearchAPI()

            search.delegate = self

            

        }

        

        //MARK:自定义一个假的导航条

        func setHeardview(){

            //MARK:最底下的view

            let heardview = UIView()

            heardview.frame = CGRectMake(0, 0, self.view.frame.size.width, 64)

            heardview.layer.borderWidth = 1

            heardview.layer.borderColor = UIColor.colorWithHex("#E0E0E0")!.CGColor

            self.view.addSubview(heardview)

            

            //MARK:选择城市的按钮

            self.currentCityBtn = UIButton()

            self.currentCityBtn.setTitle("北京市", forState: .Normal)

            self.currentCityBtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

            self.currentCityBtn.titleLabel?.font = UIFont.systemFontOfSize(15)

            self.currentCityBtn.frame = CGRectMake(5, 25, 60, 30)

            self.currentCityBtn.addTarget(self, action: #selector(ViewController.currentCityBtnAction), forControlEvents: .TouchUpInside)

            heardview.addSubview(currentCityBtn)

            

            //MARK:竖线

            let label = UILabel()

            label.frame = CGRectMake(75, 25, 1, 30)

            label.backgroundColor = UIColor.colorWithHex("#E0E0E0")!

            heardview.addSubview(label)

            

            //MARK: 搜索框

            self.searchTF = UITextField()

            self.searchTF.frame = CGRectMake(85, 25, 180, 30)

            self.searchTF.placeholder = "您要去哪"

            self.searchTF.font = UIFont.systemFontOfSize(15)

            heardview.addSubview(self.searchTF)

            NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.beginSearch), name: UITextFieldTextDidChangeNotification, object: nil)

            //MARK:取消按钮

            self.cancleBtn = UIButton()

            self.cancleBtn.setTitle("取消", forState: .Normal)

            self.cancleBtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

            self.cancleBtn.titleLabel?.font = UIFont.systemFontOfSize(15)

            self.cancleBtn.frame = CGRectMake(270, 25, 40, 30)

            heardview.addSubview(cancleBtn)

        }

        

        //MARK:城市的tableview

        func setCityTableview(){

            self.citiTableview = UITableView()

            self.citiTableview.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.frame.size.height-64)

            self.citiTableview.delegate = self

            self.citiTableview.dataSource = self

            self.citiTableview.tableFooterView = UIView(frame:CGRectZero)

            self.view.addSubview(self.citiTableview)

            self.citiTableview.hidden = true

            //        self.citiTableview.registerClass(UITableViewCell.self, forCellReuseIdentifier: "CELLID")

        }

        

        //MARK:地点的tableview

        func setTableview(){

            self.addressTableview = UITableView()

            self.addressTableview.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.frame.size.height-64)

            self.addressTableview.delegate = self

            self.addressTableview.dataSource = self

            self.addressTableview.tableFooterView = UIView(frame:CGRectZero)

            self.view.addSubview(self.addressTableview)

            self.addressTableview.hidden = true

        }

        

        

        //MARK:当前城市按钮的点击事件

        func currentCityBtnAction(){

            self.number = "1"

            self.addressTableview.hidden = true

            self.citiTableview.hidden = false

            self.citiTableview.reloadData()


        }

        

        

        //*****************************************************   获取当前城市    ***********************************************

        //MARK:单次定位获取当前城市

        func setOnceLocation(){

            //精度

            self.locationManager.desiredAccuracy = 100

            //   定位超时时间,最低2s,此处设置为11s

            self.locationManager.locationTimeout = 11

            //   逆地理请求超时时间,最低2s,此处设置为12s

            self.locationManager.reGeocodeTimeout = 12

            self.locationManager.delegate = self

            self.locationManager.requestLocationWithReGeocode(true) { (location, regeocode, error) in

                if (error == nil){

                    self.currentCityBtn.setTitle(regeocode.city, forState: .Normal)

                    self.location = location

                    self.keyWord = regeocode.city

                    print(location.coordinate.longitude ?? 0.00)

                    print(location.coordinate.latitude ?? 0.00)

                    //MARK:根据关键词搜索周边地理位置信息

                    self.setSearch()

                }

            }

        }

        

        //MARK:根据关键词搜索周边地理位置信息

        func setSearch(){

            

            let request = AMapPOIAroundSearchRequest()

            request.location = AMapGeoPoint.locationWithLatitude(CGFloat(self.location.coordinate.latitude), longitude: CGFloat(self.location.coordinate.longitude))

            request.keywords = self.keyWord

            request.sortrule = 0

            request.requireExtension = true

            search.AMapPOIAroundSearch(request)

        }

        

        //MARK: 返回周边位置信息(地点 ,经度,维度,附近一些商家的名字)

        func onPOISearchDone(request: AMapPOISearchBaseRequest!, response: AMapPOISearchResponse!) {

            if response.pois.count == 0 {

                return

            }

            

            for p:AMapPOI in response.pois {

                self.dataArray.addObject(p)

            }

            self.addressTableview.hidden = false

            self.addressTableview.reloadData()

            self.addressTableview.registerClass(PointCell.self, forCellReuseIdentifier: "CELL")

        }

        

        //************************************   tableview   的代理方法   ************************************

        

        //MARK:tableview 的代理方法

        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

            if self.number != "0" {

                return self.CirtyArray.count

            }else{

                return self.dataArray.count

            }

        }

        

        //MARK:tableview所显示的内容

        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

            if self.number != "0" {

                let identifier="identtifier";

                var cell=tableView.dequeueReusableCellWithIdentifier(identifier);

                if(cell == nil){

                    cell=UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: identifier);

                }

                cell?.textLabel?.text = self.CirtyArray[indexPath.row] as? String

                self.dataArray = NSMutableArray()

                return cell!

                

            }else{

                

                let cell:PointCell = (tableView.dequeueReusableCellWithIdentifier("CELL") as? PointCell)!

                cell.poi = self.dataArray[indexPath.row] as? AMapPOI

                return cell

            }

        }

        

        

        //MARK:CELL的点击事件

        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

            if self.number != "0" {

                self.number = "0"

                self.currentCityBtn.setTitle(self.CirtyArray[indexPath.row] as? String, forState: .Normal)

                self.citiTableview.hidden = true

                self.searchTF.text = currentCityBtn.titleLabel?.text

               beginSearch()

    //            self.addressTableview.reloadData()

                

            }else{

                self.searchTF.text = ((self.dataArray[indexPath.row] as? AMapPOI)!).name

                print(((self.dataArray[indexPath.row] as? AMapPOI)!).location)

            }

        }

        

        //MARK: Cell 返回的高度

        func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

            if self.number != "0" {

                return 44

            }else{

                return 55

            }

        }

        

        //****************************************************   根据输入的关键字搜索   *****************************

        

        //MARK: 开始搜索

        func beginSearch() {

            self.dataArray.removeAllObjects()

            let keywordsRequest = AMapPOIKeywordsSearchRequest()

            keywordsRequest.keywords = searchTF.text!

            keywordsRequest.city = currentCityBtn.titleLabel?.text

            keywordsRequest.requireExtension = true

            print(searchTF.text!)

            search.AMapPOIKeywordsSearch(keywordsRequest)

        }

        

        

    }

    自定义cell

    //

    //  PointCell.swift

    //  AmapSeach

    //

    //  Created by yanfa-fengchuang on 16/8/16.

    //  Copyright © 2016 yanfa-fengchuang. All rights reserved.

    //


    import UIKit


    class PointCell: UITableViewCell {


        

       var pointLabel: UILabel!

       var addressLabel: UILabel!

       var poi :AMapPOI?{

            didSet{

                pointLabel.text = poi?.name

                addressLabel.text = poi?.address

            }

        }

        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

            super.init(style: style, reuseIdentifier: reuseIdentifier)

            install()

        }

        

        func  install(){

            self.pointLabel = UILabel()

            self.pointLabel.frame = CGRectMake(10, 2.5, screenWidth, 25)

            self.pointLabel.font = UIFont.systemFontOfSize(16)

            self.pointLabel.textColor = UIColor.blackColor()

            self.addSubview(self.pointLabel)

            

            

            

            self.addressLabel = UILabel()

            self.addressLabel.frame = CGRectMake(10, 25, screenWidth, 25)

            self.addressLabel.font = UIFont.systemFontOfSize(14)

            self.addressLabel.textColor = UIColor.orangeColor()

            self.addSubview(self.addressLabel)

        }

        

        required init?(coder aDecoder: NSCoder) {

            fatalError("init(coder:) has not been implemented")

        }


    }

    《二》高德地图地图几个简单的功能

    //

    //  ViewController.swift

    //  CustomPin

    //

    //  Created by yanfa-fengchuang on 16/8/15.

    //  Copyright © 2016 yanfa-fengchuang. All rights reserved.

    //

     /// 注意  再使用地图的时候一定要开启定位服务   不然  你根本就不能显示你当前的位置所以一定要在plist文件里面添加  NSLocationAlwaysUsageDescription    请允许获取位置信息)允许定位的功能


    import UIKit


    let screenHight = UIScreen.mainScreen().bounds.size.height

    let screenWidth = UIScreen.mainScreen().bounds.size.width


    class ViewController: UIViewController,MAMapViewDelegate {


        var mapView: MAMapView!

        

        var location: CLLocationCoordinate2D!

        

        override func viewDidLoad() {

            super.viewDidLoad()

            

    //*****************************************************

        

            //地图简单的一些属性

            initMapView()

            

    //*****************************************************

            //进入地图显示给定的位置

            //showCustomPoint()

            

        }

        

        

    //**************************************************************************

      

        //MARK: 设置地图

        func initMapView() {

            mapView = MAMapView(frame: self.view.bounds)

            mapView.delegate = self

            

            //MARK:是否显示罗盘

            mapView.showsCompass = false

            

            //MARK:是否显示比例尺

            mapView.showsScale = false

            

            //MARK:是否显示用户位置(小圆点)

            mapView.showsUserLocation = true

            

            //MARK:是否显示用户位置(小圆点跟随用户的位置而移动)

            mapView.userTrackingMode = MAUserTrackingMode.Follow

            

            //MARK:地图精度(就是地图的放大级别)

            mapView.setZoomLevel(15, animated: true)

            view.insertSubview(mapView, atIndex: 0)

            

            let backlocationBtn = UIButton()

            backlocationBtn.frame = CGRectMake(20, screenHight-60, 40, 30)

            backlocationBtn.backgroundColor = UIColor.orangeColor()

            mapView.addSubview(backlocationBtn)

            backlocationBtn.addTarget(self, action: #selector(ViewController.backBtnaction), forControlEvents: .TouchUpInside)

            

            

        }

        

        //MARK: 一键返回用户当前位置按钮的点击事件

        func backBtnaction(){

            //MARK:是否显示用户位置(小圆点跟随用户的位置而移动)

            UIView.animateWithDuration(0.5, animations: { () -> Void in

                self.mapView.userTrackingMode = MAUserTrackingMode.Follow

            }) { (finished) -> Void in

            }


        }

        

     //************************* 给定一个坐标使进入地图的时候就显示这个点****************************

        

        //MARK: 进入地图显示给定的地点的位置 利用系统自带的大头针给添加进去并且显示标注

        func showCustomPoint(){

            mapView = MAMapView(frame: self.view.bounds)

            mapView.delegate = self


            //MARK:地图精度(就是地图的放大级别)

            mapView.setZoomLevel(15, animated: true)

            view.insertSubview(mapView, atIndex: 0)

            

             location = CLLocationCoordinate2D.init(latitude: 31.329674, longitude: 120.610733)

            

            self.mapView.centerCoordinate = location

            let pointAnnotation = MAPointAnnotation()//这个是标注不是大头针

            pointAnnotation.coordinate = location

            pointAnnotation.title = "苏州站"

            pointAnnotation.subtitle = "苏州火车站1号出口"

            mapView.addAnnotation(pointAnnotation)

            mapView.selectAnnotation(pointAnnotation, animated: true)

        }

        

    //    //如果没有这一句的话就不会显示标注

    //    func mapView(mapView: MAMapView!, viewForAnnotation annotation: MAAnnotation!) -> MAAnnotationView! {

    //            let pointReuseIndetifier = "pointReuseIndetifier"

    //            var  annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(pointReuseIndetifier)

    //            if annotationView == nil {

    //                annotationView = MAPinAnnotationView.init(annotation: annotation, reuseIdentifier: pointReuseIndetifier)

    //            }

    //            annotationView.canShowCallout = true       //设置气泡可以弹出,默认为NO

    //            annotationView.draggable = true      //设置标注可以拖动,默认为NO

    //            return annotationView;

    //    }

        

        

        

    }






    展开全文
  • iOS系统高德地图的一般使用,OC和Swift版本。
  • 在上篇swift开发高德地图中,自定义了地图的标注和气泡,但是气泡上面并没有说放个按钮点击事件是如何响应的。高德地图开发文档中也并没有详细说明。 高德地图官方文档:...

    在上篇swift开发高德地图中,自定义了地图的标注和气泡,但是气泡上面并没有说放个按钮点击事件是如何响应的。高德地图开发文档中也并没有详细说明。

    高德地图官方文档:https://lbs.amap.com/api/ios-sdk/guide/draw-on-map/draw-marker

    我运行了官方提供的demo,看到了CustomAnnotationView.m文件中却实现了这个功能(如下图),这个Test(红色框框的)是一个按钮,点击会打印出经纬度。

    根据demo我查看测试到了实现气泡中的按钮可点击是这行代码,红色框框里的:

    但是这些是OC语言的,我用的是swift语言,所以需要自己转换一下就行了,根据在上篇文章中的https://blog.csdn.net/qq_31622345/article/details/100772687CustomAnnotationViewSwift类中重写point类,直接添加代码即可:

        override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
            var inside = super.point(inside: point, with: event)
            
            if !inside && self.isSelected {
                inside = (self.calloutView?.point(inside: self.convert(point, to: self.calloutView), with: event))!
            }
            
            return inside
        }

     

    展开全文
  • Swift使用高德地图SDK

    2017-05-10 22:57:24
    //创建地图 let mapview = MAMapView(frame: self.view.bounds) mapview.delegate = self self.view.addSubview(mapview) self.navigationController?.navigationItem.title = "附近旅伴
    //创建地图
            let mapview = MAMapView(frame: self.view.bounds)
            mapview.delegate = self
            self.view.addSubview(mapview)
            self.navigationController?.navigationItem.title = "附近旅伴"
            //显示用户位置
            mapview.isShowsUserLocation = true
            mapview.userTrackingMode = .follow
            //配置显示当前位置的小蓝点
            mapview.userLocation.title = "Bohemian"
            mapview.userLocation.subtitle = "Rey"
    
            //后台更新坐标
            mapview.pausesLocationUpdatesAutomatically = false
            mapview.allowsBackgroundLocationUpdates = true
    
            AMapServices.shared().enableHTTPS = true
    
            //大头针测试
            var mapa = MAPointAnnotation()
            mapa.coordinate = CLLocationCoordinate2DMake(36.66694, 117.14017)
            mapa.title = "山东大学软件学院"
            mapa.subtitle = "Here we are"
    
            mapview.addAnnotation(mapa)
    

    我基本上使用到的就是地图、标注、标注的view等信息内容。

    展开全文
  • 轨迹纠偏的作用就是去掉绘制路线时候两个定位点之间产生的毛刺和尖角,使路线看起来更加的圆滑,正常
  • 新入职了一家公司,由于近段时间公司的事务不是很忙,我的上级领导让我学习swift语言并且进行一些Demo的制作。这不,领导让我集成高德地图的SDK,并完成一些...下面说说使用Swift如何集成高德地图。 官方的Demo:ht

            新入职了一家公司,由于近段时间公司的事务不是很忙,我的上级领导让我学习swift语言并且进行一些Demo的制作。这不,领导让我集成高德地图的SDK,并完成一些功能,刚才开始的时候真是一头雾水呀,从来没有实际开发过IOS应用的我,在学习Swift不到半个月的时间就让我做这么高难度的东西,当时是欲哭无泪呀。于是乎到处找资料........下面说说使用Swift如何集成高德地图。

    官方的Demo:http://lbs.amap.com/api/ios-sdk/guide/swift/

    我的Demo也是参照官方的,但是会比较具体,对初学者来说会比较容易看得懂吧。

    1、首先创建一个工程 Single View Application 。


    product Name :  工程名称。

    Organization Name :组织或个人的名称。

    Organization Identifier:组织或个人的唯一标示,这里在我们打包上传到APPStore里面会有用到。

    Bundle Identifier:绑定唯一标识。

    Language:基于什么语言去编写,这里选择Swift。

    Devices:该工程运行在什么设备上,iphone或ipad。这里选择Uiversal,意思是通用的,都在iphone和ipad上都能运行。

    创建好工程后的目录是这样的:


    2、接下来我们需要导入高德地图的SDK,如果没有下载的话可以去高德地图官网下载:http://lbs.amap.com/api/ios-sdk/down/


    需要下载2D地图SDk和搜索SDK。

    以下是导入SDK的步骤:

    j

    具体的导入可参考一下官网,这里需要说明的一点是,我们需要将下仔下来的2D地图SDK和搜索SDK放在工程目录下面,别问我为什么,当时就没放在工程目录下,出现的错误坑了我好久。如图:


    现在我们只需要更改一些ViewController.swift文件就可以了:


    这里的APPkey获取和很简单,直接去官网注册就行了。


    接下来我们需要新建一个桥接文件:

    在(工程路径)下面新建一个MapOfGaoDe-Bridging-Header.h,并添加以下内容。

    #import <MAMapKit/MAMapKit.h>
    #import <AMapSearchKit/AMapSearchKit.h> //V3.0.0(含)之后版本引入AMapSearchKit.h
    //#import <AMapSearchKit/AMapSearchAPI.h> //V3.0.0(不含)之前版本引入AMapSearchAPI.h

    接着,左侧目录中选中工程名,在 TARGETS->Build Setting-> Swift Compiler - Code Generation -> Objective-C Briding Header 中输入桥接文件的路径,如下图:


    在模拟器上运行一下程序,就能显示地图了,如果运行在手机上,需要证书。

    第二部分 ,那么我们如何来操作地图呢?

    查看高德地图的API文档,你会欢喜的看到,里面提供了各种个样的方法,文档地址:http://lbs.amap.com/Public/reference/iOS_SDK/

    查看 MAMapView,你会发现各种方法。

    我们可以在initMapView()方法里面随意做修改:

    //是否显示标尺
     mapView!.showsScale = false

    //设置当前地图的缩放级别

     mapView!.setZoomLevel(4.1, animated: true)

    ......and so on  !!!

    那么我们如何在地图上添加覆盖物呢,相信你看API的时候也发现了,对,没错,就是addOverlay()方法,那我们改怎么用呢?

    首先,你要在ViewController.m的ViewController类里面添加一个方法:

    //实现一个圆

    func mapView(mapView: MAMapView!, viewForOverlay overlay: MAOverlay!) -> MAOverlayView! {
            if overlay.isKindOfClass(MACircle){
                let circle = MACircleView.init(overlay: overlay) ;
                circle.lineWidth = 50.0 ;
                circle.strokeColor = UIColor.blueColor() ;
                circle.fillColor = UIColor.redColor() ;
                return circle
                   }
            return nil ;
        }

    让后在initMapView里面添加以下代码:

    let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2D.init(latitude:40.078537,longitude:116.5871)

            let overlay:MAOverlay = MACircle.init(centerCoordinate: coordinate, radius: 5000.0)

            mapView!.addOverlay(overlay) ;

    整体代码如下:


    现在就运行一下代码看看效果吧?

    如果有什么不会的话可以给我留言~~。










    展开全文
  • 高德地图开发需要自己到官网http://lbs.amap.com/console/ 注册一个ak,新建一个swift工程,然后在Info.plist...高德地图的库以及依赖库加入到项目里面需要的库如下截图:添加头文件具体的方式见Swift基础--调用第三

    高德地图开发需要自己到官网http://lbs.amap.com/console/ 注册一个ak,新建一个swift工程,然后在Info.plist中添加一个NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription。

    高德地图的库以及依赖库加入到项目里面

    需要的库如下截图:


    添加头文件

    具体的方式见Swift基础--调用第三方OC项目,在Bridging-Header.h中加入如下代码,这样我们就可以调用高德地图相关的接口

    #import <MAMapKit/MAMapKit.h>
    #import <AMapSearchKit/AMapSearchAPI.h>

    基础地图类实现

    基础类里面编写地图相关的初始化以及功能的开发,界面如下:包含定位,数据刷新,放大缩小添加以及功能实现。


    //
    //  BaseMapController.swift
    //  SwiftMap
    //  地图的基础部分
    //  Created by System Administrator on 15/1/24.
    //  Copyright (c) 2015年 jwzhangjie. All rights reserved.
    //
    
    import UIKit
    
    class BaseMapController : UIViewController, MAMapViewDelegate, AMapSearchDelegate {
        
        var mapView:MAMapView!
        var search:AMapSearchAPI!
        var centerCoordinate:CLLocationCoordinate2D!
        
        var centerMarker:UIImageView!
        
        func initMapView(){
            mapView = MAMapView(frame: CGRectMake(0, 65, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds)-65))
            mapView.showsUserLocation = true
            mapView.setUserTrackingMode(MAUserTrackingModeFollow, animated: true)
            mapView.showsCompass = false
            mapView.showsScale = true
            mapView.scaleOrigin = CGPointMake(100, mapView.frame.size.height-20)
            mapView.delegate = self
            self.view.addSubview(mapView)
        }
        
        func initSearchView(){
            search = AMapSearchAPI(searchKey: MAMapServices.sharedServices().apiKey, delegate: self)
        }
        
        func initBtns(){
            centerMarker = UIImageView(frame: CGRectMake(0, 0, 38, 50))
            centerMarker.center = mapView.center
            centerMarker.frame=CGRectMake(centerMarker.frame.origin.x, centerMarker.frame.origin.y-65, 38, 50);
            centerMarker.image = UIImage(named: "green_pin.png")
            mapView.addSubview(centerMarker)
            //定位按钮
            var locationBtn:UIButton = UIButton(frame: CGRectMake(15, mapView.frame.size.height-70, 35, 35))
            locationBtn.setBackgroundImage(UIImage(named: "ic_locate.png"), forState: UIControlState.Normal)
            locationBtn.setBackgroundImage(UIImage(named: "ic_locate_press.png"), forState: UIControlState.Selected)
            locationBtn.setBackgroundImage(UIImage(named: "ic_locate_press.png"), forState: UIControlState.Highlighted)
            locationBtn.tag = 1;
            locationBtn.addTarget(self, action:"btnSelector:", forControlEvents: UIControlEvents.TouchUpInside)
            mapView.addSubview(locationBtn)
            //刷新按钮
            var refreshBtn:UIButton = UIButton(frame: CGRectMake(15, mapView.frame.size.height-110, 35, 35))
            refreshBtn.setBackgroundImage(UIImage(named: "ic_refresh.png"), forState: UIControlState.Normal)
            refreshBtn.setBackgroundImage(UIImage(named: "ic_refresh_press.png"), forState: UIControlState.Selected)
            refreshBtn.setBackgroundImage(UIImage(named: "ic_refresh_press.png"), forState: UIControlState.Highlighted)
            refreshBtn.tag = 2;
            refreshBtn.addTarget(self, action: "btnSelector:", forControlEvents: UIControlEvents.TouchUpInside)
            mapView.addSubview(refreshBtn)
            //缩小按钮
            var zoomOutBtn:UIButton = UIButton(frame: CGRectMake(mapView.frame.size.width - 15-35, mapView.frame.size.height-70, 35, 35))
            zoomOutBtn.setBackgroundImage(UIImage(named: "ic_zoom_out.png"), forState: UIControlState.Normal)
            zoomOutBtn.setBackgroundImage(UIImage(named: "ic_zoom_out_press.png"), forState: UIControlState.Selected)
            zoomOutBtn.setBackgroundImage(UIImage(named: "ic_zoom_out_press.png"), forState: UIControlState.Highlighted)
            zoomOutBtn.tag = 3;
            zoomOutBtn.addTarget(self, action: "btnSelector:", forControlEvents: UIControlEvents.TouchUpInside)
            mapView.addSubview(zoomOutBtn)
            //放大按钮
            var zoomInBtn:UIButton = UIButton(frame: CGRectMake(mapView.frame.size.width-15-35, mapView.frame.size.height-110, 35, 35))
            zoomInBtn.setBackgroundImage(UIImage(named: "ic_zoom_in.png"), forState: UIControlState.Normal)
            zoomInBtn.setBackgroundImage(UIImage(named: "ic_zoom_in_press.png"), forState: UIControlState.Selected)
            zoomInBtn.setBackgroundImage(UIImage(named: "ic_zoom_in_press.png"), forState: UIControlState.Highlighted)
            zoomInBtn.tag = 4;
            zoomInBtn.addTarget(self, action: "btnSelector:", forControlEvents: UIControlEvents.TouchUpInside)
            mapView.addSubview(zoomInBtn)
        }
        
        
        func btnSelector(sender: UIButton) {
            switch sender.tag {
            case 1://定位
                if centerCoordinate != nil {
                    mapView.setCenterCoordinate(centerCoordinate, animated: true)
                }
            case 2://刷新
                getLocationRoundFlag()
                mapView.showsUserLocation = true; //YES 为打开定位,NO 为关闭定位
            case 3:
                if mapView.zoomLevel >= 4 && mapView.zoomLevel <= 19{
                    mapView.setZoomLevel(mapView.zoomLevel-1, animated: true)
                }else if mapView.zoomLevel >= 3 && mapView.zoomLevel < 4{
                    mapView.setZoomLevel(3, animated: true)
                }
            case 4:
                if mapView.zoomLevel >= 3 && mapView.zoomLevel <= 18{
                    mapView.setZoomLevel(mapView.zoomLevel+1, animated: true)
                }else if mapView.zoomLevel > 18 && mapView.zoomLevel <= 19{
                    mapView.setZoomLevel(19, animated: true)
                }
            default:
                println("not known ")
            }
        }
        
        func getLocationRoundFlag(){
        }
        
        func mapView(mapView: MAMapView!, didUpdateUserLocation userLocation: MAUserLocation!, updatingLocation: Bool) {
            if updatingLocation {
                //取出当前位置的坐标
                println("latitude : %f,longitude: %f",userLocation.coordinate.latitude,userLocation.coordinate.longitude);
                centerCoordinate = CLLocationCoordinate2DMake(userLocation.coordinate.latitude,userLocation.coordinate.longitude);
                mapView.showsUserLocation = false;
            }
        }
        
        //清除数据
        func clearMapData(){
            clearMapView()
            clearSearch()
        }
        
        func clearMapView(){
            mapView.showsUserLocation = false
            mapView.delegate = nil
        }
        
        func clearSearch(){
            self.search.delegate = nil
        }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }

    具体实现类

    DetailViewController继承BaseMapController

    //
    //  DetailViewController.swift
    //  SwiftMap
    //
    //  Created by System Administrator on 15/1/22.
    //  Copyright (c) 2015年 jwzhangjie. All rights reserved.
    //
    
    import UIKit
    
    class DetailViewController : BaseMapController {
        
        var data:NSMutableData!
        
    
        @IBAction func returnHome(sender: AnyObject) {
            mapView.removeFromSuperview()
            self.navigationController?.popViewControllerAnimated(true)
        }
        
        @IBAction func segmentChanged(sender: AnyObject) {
            switch sender.selectedSegmentIndex{
            case 0://已认证车辆
                println("0")
            case 1://全部车辆
                println("1")
            default:
                println("default")
            }
        }
        
        override func viewDidLoad() {
            super.viewDidLoad()
            initMapView()
            initSearchView()
            initBtns()
            data = NSMutableData();
        }
        
        
        override func getLocationRoundFlag(){
            var requestUrl:String = "http://api.map.baidu.com/geosearch/v3/nearby?ak=dcZObrBgdDD2s4qLCeC4YVOf&geotable_id=92326&location=121.613461,31.197495&radius=1000000&sortby=distance:1";
    //        var request:NSURLRequest = NSURLRequest(URL:NSURL(string: requestUrl))
    //        var connect:NSURLConnection = NSURLConnection(request: request, delegate: self)!
    //        data = NSMutableData()
            println(requestUrl)
            
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    
    记得要在真机上测试



    展开全文
  • swift高德地图随时读取坐标地点的写法
  • 高德地图官方文档:...看高德地图官方文档基本都是OC语言写的,swift也就没这么详细说明了。 这种高度自定义,用的也是oc自定义,没有给出swift版本的demo出来,所以我们想做到后面这个效果来: 气泡在iOS中又...
  • 高德地图中,在funcmapView(_mapView:MAMapView!,didUpdateuserLocation:MAUserLocation!,updatingLocation:Bool)中取其定位信息,获取MAUserLocation,通过geocoder.reverseGeocodeLocation(location!)获取当前位置...
  • 的要求十分严格,那这也导致了和Objective-C的一些不同,例如高德地图API中是这样定义的- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation { if ([annotation isKindOfClass:...
  • 用更简单的方式去使用地图(支持 MapKit、高德地图、百度地图)
  • 自定义大头针和自定义气泡的代码官方文档上都写的很详细,我这里不再记录,这篇主要记录的是自定义气泡上面有一个按钮,点击按钮响应对应事件的场景,效果如下: ... 自定义一个View先: class CCPOICallOutView:...
  • Swift高德地图

    2015-12-30 10:11:43
    高德地图开发需要自己到官网http://lbs.amap.com/console/ 注册一个ak,新建一个swift工程,然后在Info.plist中添加一个NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription。 高德地图的库...
  • 演示:代码地址: https://github.com/RainManGO/PanView主要在Xib中使用:xib的view直接绑定panview即可。如图:
  • 一个绘制地图轨迹的Demo.是利用高德地图SDK写的.里面也有针对高德地图使用示例以及详细注释.
  • 首先申明,此文章是转载我是闰土你是猹博主的文章,觉得有用,就拿过来,确实不好找相关案例,特此记录一下!...这里使用的朋友直接拷贝下面代码到项目中即可: //地图类型 enum MapForm { enum MapURI:Strin...
  • 直接上代码吧,功能比较简单,写出来只是...//地图类型 enum MapForm { enum MapURI:String { //百度 case baiduMap = "baidumap://" //高德 case gaodeMap = "iosamap://" //苹果 case...
  • swift里,采用cocoapods的方式导入高德地图是个很方便的方式,但是高德地图并不提供源码导入,pod update之后看到的依然是个framework。 坑的是没有对应的module!!! 这里介绍最简单的方式,新建一个oc的新类, ...
  • Swift 跳转到地图导航

    2020-06-08 17:59:58
    //地图类型 enum MapForm { enum MapURI:String { //百度 case baiduMap = "baidumap://" //高德 case gaodeMap = "iosamap://" //苹果 case appleMap = "http://maps.apple.com/" //谷歌 case go
1 2 3 4 5 ... 20
收藏数 753
精华内容 301