显示超过200个注释引脚iOS9​​ swift的最佳方式

时间:2016-04-14 07:36:11

标签: ios xcode swift annotations mkmapview

我的应用中有一个mapView,它应该显示超过200个注释引脚。到目前为止,我添加了不到100个引脚,让我感到疑惑。难道没有一种更聪明的方式来展示它们吗?目前代码很长,我担心它会更长。下面你可以看到我如何添加引脚(只有一个引脚的例子)。我怎样才能更聪明地做到这一点?

let first = Artwork(title: "First annotation",
                              locationName: "Tryk for rute",
                              discipline: "Butik",
                              coordinate: CLLocationCoordinate2D(latitude: 55.931326, longitude: 12.284186))

map.addAnnotation(first)

那些代码片段是为大约100个注释引脚编写的 - 必须有更好的方法!

希望你能帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您的注释数据不存储在数组中的对象中,并且您已经获得了100个示例代码副本。

如果信息是静态的,您可以将信息包含在属性列表(plist)中。

你的plist可能看起来像这样:

<dict>
    <key>Locations</key>
    <array>
        <dict>
            <key>Title</key>
            <string>First annotation</string>
            ... more information here
        </dict>
        <dict>
            <key>Title</key>
            <string>Second annotation</string>
            ... more information here
        </dict>
    </array>
</dict>
</plist>

然后,您可以加载plist并迭代locations数组,以将注释添加到地图中。像这样:

func addAnnotations()
    {
        // load your plist
        if let path = NSBundle.mainBundle().pathForResource("StaticInformation", ofType: "plist") {
            if let dict = NSDictionary(contentsOfFile: path) as? Dictionary<String, AnyObject> {
                // get your static locations information as an array
                if let locations = dict["Locations"] as? Array<Dictionary<String, AnyObject>> {
                    // iterate your locations
                    for (index, location) in locations.enumerate() {

                        let title = location["Title"] as? String
                        // obtain the information needed from the location dict

                        // create your annotation
                        let first = Artwork(title: title,
                                            locationName: ...,
                                            discipline: ...,
                                            coordinate: ...)

                        map.addAnnotation(first)
                    }
                }
            }
        }
    }

代码未经过测试,抱歉。但希望你明白了。