Swift中的MapKit,第3部分-MKPointAnnotation,addAnnotations [英] MapKit in Swift, Part 3 - MKPointAnnotation, addAnnotations

查看:70
本文介绍了Swift中的MapKit,第3部分-MKPointAnnotation,addAnnotations的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Swift中使用Map Kit.我尝试在地图上显示该区域,一些图钉(MKPointAnnotation)和当前位置.我决定扩展类MKPointAnnotation-添加一个类别.

I'm trying work with Map Kit in Swift. I try to display the area on the map, some pins (MKPointAnnotation) and the current position. I decided to extend the class MKPointAnnotation - add a category.

MyAnnotation.swift类:

Class MyAnnotation.swift:

import UIKit
import MapKit

class MyAnnotation: MKPointAnnotation {
var category = Int() 
}

我制作了一个元组数组来存储有关对象的信息.在循环中,我处理此数组的所有元素,并从中制成数组MyAnnotation.然后,我尝试使用addAnnotations显示整个数组MyAnnotation.但是只显示数组的最后一个元素....

I made an array of tuples to store information about the objects. In the loop I process all the elements of this array and make from it an array MyAnnotation. Then, I try to display the entire array MyAnnotation using addAnnotations. But displays only the last element of the array....

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

@IBOutlet weak var mainMapView: MKMapView!

var locationManager = CLLocationManager()

var oneAnnotation = MyAnnotation()
var annotationArray = [MyAnnotation]()

var allObjectsTupleArray: [(objLat: CLLocationDegrees, objLong: CLLocationDegrees, objName: String, objDesc: String, objCat: Int)] = 
[(objLat: 53.204526, objLong: 50.111751, objName: "St. George's Church", objDesc: "Church of the Great Martyr St. George", objCat: 1), 
(objLat: 53.19364, objLong: 50.096599, objName: "Heart of Jesus Church", objDesc: "The Roman Catholic Church. Parish of the Sacred Heart of Jesus", objCat: 1), 
(objLat: 53.238906, objLong: 50.183754, objName: "Spiridonievsky Church", objDesc: "Parish of St. Spyridon the Wonderworker", objCat: 1), 
(objLat: 53.248509, objLong: 50.199976, objName: "St. John the Forerunner Church", objDesc: "Parish of of the Prophet and Forerunner St. John", objCat: 1), 
(objLat: 53.231875, objLong: 50.244071, objName: "The Resurrection Cathedral", objDesc: "The Resurrection Cathedral", objCat: 1)]

override func viewDidLoad() {
    super.viewDidLoad()

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()

    var currentLatitude = 53.2393
    var currentLongitude =  50.18145

    var latDelta = 0.05
    var longDelta = 0.05

    var currentLocationSpan: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
    var currentLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(currentLatitude, currentLongitude)
    var currentRegion: MKCoordinateRegion = MKCoordinateRegionMake(currentLocation, currentLocationSpan)
    self.mainMapView.setRegion(currentRegion, animated: true)

    for oneObject in allObjectsTupleArray {

        var oneObjLoc: CLLocationCoordinate2D = CLLocationCoordinate2DMake(oneObject.objLat, oneObject.objLong)
        println("Latitude: \(oneObject.objLat)  Longitude: \(oneObject.objLong)")
        oneAnnotation.coordinate = oneObjLoc

        oneAnnotation.title = oneObject.objName
        println("ObjectName: \(oneObject.objName)")

        oneAnnotation.subtitle = oneObject.objDesc
        println("ObjectDescription: \(oneObject.objDesc)")

        oneAnnotation.category = oneObject.objCat
        println("Category: \(oneObject.objCat)")

        annotationArray.append(oneAnnotation)
    }

    self.mainMapView.addAnnotations(annotationArray)
}
}

我在self.mainMapView.addAnnotations(annotationArray)之前插入,检查数组annotationArray的内容:

I insert before self.mainMapView.addAnnotations(annotationArray) check the contents of the array annotationArray:

for testVar in annotationArray {
        println("Title of annotation: \(testVar.title)")
} 

此检查始终显示相同的标题-最后一个!为什么表达式annotationArray.append(oneAnnotation)填充最后一个值的数组?在Xcode 6 Beta 5中,数组不推荐使用+= ...

This check is always displays the same title - the last one! Why expression annotationArray.append(oneAnnotation) fills the array of the last value? In Xcode 6 Beta 5 is deprecated += for arrays...

我在做什么错了?

推荐答案

您只有MyAnnotation类的一个实例,因此您总是将同一对象附加到数组中.

You have only one instance of your MyAnnotation class so you are appending always the same object to your array.

您必须在每次循环迭代中创建类的新实例.

You have to create a new instance of your class in each loop iteration.

for oneObject in allObjectsTupleArray {
    let oneAnnotation = MyAnnotation()
    ...
}

这篇关于Swift中的MapKit,第3部分-MKPointAnnotation,addAnnotations的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆