2016-09-24 60 views
2

我是Swift的新手。我強麥得到谷歌地圖2個標記:使用Google iOS SDK創建多個標記

import UIKit 
import GoogleMaps 

class ViewController: UIViewController { 

    // You don't need to modify the default init(nibName:bundle:) method. 

    override func loadView() { 
     let camera = GMSCameraPosition.cameraWithLatitude(37.0902, longitude: -95.7129, zoom: 3.0) 
     let mapView = GMSMapView.mapWithFrame(CGRect.zero, camera: camera) 
     mapView.myLocationEnabled = true 
     view = mapView 

     let state_marker = GMSMarker() 
     state_marker.position = CLLocationCoordinate2D(latitude: 61.370716, longitude: -152.404419) 
     state_marker.title = "Alaska" 
     state_marker.snippet = "Hey, this is Alaska" 
     state_marker.map = mapView 

     let state_marker1 = GMSMarker() 
     state_marker1.position = CLLocationCoordinate2D(latitude: 32.806671, longitude: -86.791130) 
     state_marker1.title = "Alabama" 
     state_marker1.snippet = "Hey, this is Alabama" 
     state_marker1.map = mapView 

    } 
} 

我需要添加51個多種標誌物不同的緯度和經度與不同的標題和摘要各狀態。

我可能只是複製這個塊51次,但有沒有一種方法來優化此代碼?

回答

10

您應該創建這樣一個結構:

struct State { 
    let name: String 
    let long: CLLocationDegrees 
    let lat: CLLocationDegrees 
} 

然後在你的VC創建這個結構數組:

let states = [ 
    State(name: "Alaska", long: -152.404419, lat: 61.370716), 
    State(name: "Alabama", long: -86.791130, lat: 32.806671), 
    // the other 51 states here... 
] 

現在你可以循環訪問數組,在每次迭代中添加標記:

for state in states { 
    let state_marker = GMSMarker() 
    state_marker.position = CLLocationCoordinate2D(latitude: state.lat, longitude: state.long) 
    state_marker.title = state.name 
    state_marker.snippet = "Hey, this is \(state.name)" 
    state_marker.map = mapView 
} 

您可能還需要補充一點的儲存狀態名稱爲鍵和相應的GMSMarker爲值的字典。這樣,您可以稍後修改標記。

var markerDict: [String: GMSMarker] = [:] 

override func loadView() { 

    for state in states { 
     let state_marker = GMSMarker() 
     state_marker.position = CLLocationCoordinate2D(latitude: state.lat, longitude: state.long) 
     state_marker.title = state.name 
     state_marker.snippet = "Hey, this is \(state.name)" 
     state_marker.map = mapView 
     markerDict[state.name] = state_marker 
    } 

} 
+0

markerDict會做什麼? – dang

+0

如果你想稍後訪問標記(你可能會這樣做),你可以使用字典來訪問它:'markerDict [「Alaska」]'。如果您確定不會訪問標記,請忽略它。 @dang – Sweeper

+0

完美,謝謝! – dang

-1

創建3個數組,

第1個數組包含每個標記的座標。

第二個數組,包含每個標記的標題。

第三個數組,包含每個標記的片段。

現在使用循環創建標記併爲每個標記分配相應的位置,標題和片段。

示例代碼:

for i in 0..<numberOfMarkers 
{ 
    let state_marker1 = GMSMarker() 
     state_marker1.position = locationCoordinateArray[i] 
     state_marker1.title = locationTitleArray[i] 
     state_marker1.snippet = locationSnippetArray[i] 
     state_marker1.map = mapView 
} 
+0

謝謝,你能給我舉例與我的代碼2標記?這似乎不適用於我。 – dang

相關問題