iOS 高德SDK——swift自定義地圖點(diǎn)標(biāo)記樣式

去我的博客查看:https://izumi.pub/iOS/596

1.純圖片替換

// 只需在以下函數(shù)中重設(shè)annotationView圖片就行
func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! {
  if annotation.isKind(of: MAPointAnnotation.self) {
    if annotation.title != "當(dāng)前位置" {
      let pointReuseIndetifier = "pointReuseIndetifier"
      var annotationView: MAPinAnnotationView? = mapView.dequeueReusableAnnotationView(withIdentifier: pointReuseIndetifier) as! MAPinAnnotationView?
      if annotationView == nil {
        annotationView = MAPinAnnotationView(annotation: annotation, reuseIdentifier: pointReuseIndetifier)
      }
      annotationView!.canShowCallout = true
      annotationView!.image = UIImage(named: "公交站牌32")
      // 圖片偏移量贷屎,根據(jù)自己圖片不同來設(shè)定
      annotationView!.centerOffset = CGPoint(x: 0, y: -18);
      return annotationView!
    }
  }
  return nil
}
單純替換UIImage.jpg

點(diǎn)擊以后彈出

點(diǎn)擊點(diǎn)標(biāo)記.jpg

但我們?nèi)绻窍胪瑫r顯示圖標(biāo)和文字皱蹦,則需要自己自定義標(biāo)記

2.自定義樣式同時顯示圖片文字

1.自定義一個UIView組件

參考鏈接:Swift - XIB結(jié)合UIView制作自定義組件(xib加載繪制UIView)

class CustomStationAnnotationView: UIView {

  @IBOutlet weak var stationImage: UIImageView!
  @IBOutlet weak var stationLabel: UILabel!

  //布局相關(guān)設(shè)置
  override func layoutSubviews() {
    super.layoutSubviews()
  }
  /*** 下面的幾個方法都是為了讓這個自定義類能將xib里的view加載進(jìn)來舅桩。這個是通用的,我們不需修改姚垃。 ****/
  var contentView:UIView!

  //初始化時將xib中的view添加進(jìn)來
  override init(frame: CGRect) {
    super.init(frame: frame)
    contentView = loadViewFromNib()
    // 設(shè)置字體白对、背景顏色
    stationLabel.backgroundColor = ViewUtility.UIColorFromRGB(color_vaule: "#485A73")
    stationLabel.textColor = ViewUtility.UIColorFromRGB(color_vaule: "#EEDA1B")
    addSubview(contentView)
  }

  //初始化時將xib中的view添加進(jìn)來
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    contentView = loadViewFromNib()
    addSubview(contentView)
  }
  //加載xib
  func loadViewFromNib() -> UIView {
    let className = type(of: self)
    let bundle = Bundle(for: className)
    let name = NSStringFromClass(className).components(separatedBy: ".").last
    let nib = UINib(nibName: name!, bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
    return view
  }
}

站點(diǎn)樣式暫時就畫成下面這個樣子层释,注意將Background設(shè)為Clear Color昔脯,即無背景色

站點(diǎn)xib.png

2.自定義CustomAnnotationView

新建一個類CustomAnnotationView,繼承MAAnnotationView放刨,重寫init引入自定義的UIView

import UIKit

class CustomAnnotationView: MAAnnotationView {

  override init!(annotation: MAAnnotation!, reuseIdentifier: String!) {
    super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
    // 引入自定義UIView
    let station = CustomStationAnnotationView.init(frame: CGRect.init(x: 0, y: 0, width: 80, height: 60))
    // 設(shè)置樣式里的站點(diǎn)名稱
    let title:String = annotation.title as! String
    station.stationLabel.text = title
    self.addSubview(station)
  }

  required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}

3.添加站點(diǎn)信息

首先創(chuàng)建一個mapview(這部分不作講解)工秩,然后添加自定義點(diǎn)標(biāo)記

// Station為一個自定義的對象,包含 名稱經(jīng)緯度 就行
var stationArray=Array<Station>()
var showStationAnnotationArray=Array<MAPointAnnotation>()

// 本地添加一個站點(diǎn)數(shù)據(jù)
func addStationArray() {
  let station = Station.init()
  station.name = "公交站"
  station.lat = 2253242
  station.lng = 11395239
  stationArray.append(station)
  self.showStationPoint()
}

// MARK: - 添加站點(diǎn)信息
func showStationPoint() {
  for station in stationArray {
    let pointAnnotation = MAPointAnnotation()
    pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: Double(station.lat)/100000.0, longitude: Double(station.lng)/100000.0)
    pointAnnotation.title = station.name
    pointAnnotation.subtitle = station.note
    showStationAnnotationArray.append(pointAnnotation)
  }
  mapview.addAnnotations(showStationAnnotationArray)
}

//MARK: - 設(shè)置地圖站點(diǎn)樣式
func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! {
  if annotation.isKind(of: MAPointAnnotation.self) {
    if annotation.title != "當(dāng)前位置" {
      let customReuseIndetifier: String = "customReuseIndetifier"
      var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: customReuseIndetifier) as? CustomAnnotationView
      if annotationView == nil {
        annotationView = CustomAnnotationView.init(annotation: annotation, reuseIdentifier: customReuseIndetifier)
      }
      annotationView?.canShowCallout = false
      annotationView?.isDraggable = true
      annotationView!.centerOffset = CGPoint(x: -40, y: -30)
      return annotationView!
    }
  }
  return nil
}

最終展示效果如圖:

站點(diǎn)地圖.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末进统,一起剝皮案震驚了整個濱河市助币,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麻昼,老刑警劉巖奠支,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抚芦,居然都是意外死亡倍谜,警方通過查閱死者的電腦和手機(jī)迈螟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尔崔,“玉大人答毫,你說我怎么就攤上這事〖敬海” “怎么了洗搂?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長载弄。 經(jīng)常有香客問我耘拇,道長,這世上最難降的妖魔是什么宇攻? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任惫叛,我火速辦了婚禮,結(jié)果婚禮上逞刷,老公的妹妹穿的比我還像新娘嘉涌。我一直安慰自己,他們只是感情好夸浅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布仑最。 她就那樣靜靜地躺著,像睡著了一般帆喇。 火紅的嫁衣襯著肌膚如雪警医。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天番枚,我揣著相機(jī)與錄音法严,去河邊找鬼损敷。 笑死葫笼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拗馒。 我是一名探鬼主播路星,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诱桂!你這毒婦竟也來了洋丐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤挥等,失蹤者是張志新(化名)和其女友劉穎友绝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肝劲,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迁客,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年郭宝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掷漱。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡粘室,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卜范,到底是詐尸還是另有隱情衔统,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布海雪,位于F島的核電站锦爵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奥裸。R本人自食惡果不足惜棉浸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刺彩。 院中可真熱鬧迷郑,春花似錦、人聲如沸创倔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畦攘。三九已至霸妹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間知押,已是汗流浹背叹螟。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留台盯,地道東北人罢绽。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像静盅,于是被迫代替她去往敵國和親良价。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349