用户是否可以搜索地图来查看我在swift中固定的位置



我正在创建一个带有引脚的应用程序,我添加了引脚,当单击该引脚时,会打开一个包含建筑物信息的警报。我想让用户搜索这些位置,但我不确定这是否可能,因为我没有在上面找到任何代码。如果你知道如何做到这一点或有任何建议,请告诉我。

import UIKit
import MapKit
import CoreLocation
class CustomPointAnnotiation: MKPointAnnotation {
    var imageName: String!
}
class MapVC: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
    @IBOutlet weak var mapView: MKMapView!
    var manager = CLLocationManager()
    class Location: NSObject, MKAnnotation {
        var title: String?
        var coordinate: CLLocationCoordinate2D
        var info: String
        init(title: String, coordinate: CLLocationCoordinate2D, info: String) {
            self.title = title
            self.coordinate = coordinate
            self.info = info
                    }
    }
    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
        // 1
        let identifier = "Location"
        // 2
        if annotation.isKindOfClass(Location.self) {
            // 3
            var image: UIImageView
            image = UIImageView(frame:CGRect(x: 50,y: 200,width: 250,height: 180))
            image.image = UIImage(named:"")
            self.view.addSubview(image)
            var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
            if annotationView == nil {
                //4
                annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
                annotationView!.canShowCallout = true
                // 5
                let btn = UIButton(type: .DetailDisclosure)
                annotationView!.rightCalloutAccessoryView = btn
            } else {
                // 6
                annotationView!.annotation = annotation
            }
            return annotationView
        }
        // 7
        return nil
    }
    func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
        let location = view.annotation as! Location
        let placeName = location.title
        let placeInfo = location.info
        var imageView: UIImageView
        imageView = UIImageView(frame:CGRect(x: 50,y: 200,width: 250,height: 180))
        imageView.backgroundColor = UIColor.whiteColor()
        imageView.layer.cornerRadius = 8.0
        imageView.clipsToBounds = true
        if location.title == "Woodburn Hall" {
            imageView.image = UIImage(named:"woodburn.png")
            self.view.addSubview(imageView)
        }
        let ac = UIAlertController(title: placeName, message:placeInfo, preferredStyle:UIAlertControllerStyle.ActionSheet)
        ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
       self.presentViewController(ac, animated: true, completion: nil)
       imageView.removeFromSuperview()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        mapView.delegate = self
        // Core Location
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()
        //set initial location to Indiana University
        let initialLocation = CLLocation(latitude: 39.17, longitude: -86.5148)
        let regionRadius: CLLocationDistance = 100
        func centerMapOnLocation(location:CLLocation){
            let coordinateRegion =
            MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 2.0, regionRadius * 2.0)
            mapView.setRegion(coordinateRegion, animated: true)

            mapView.mapType = MKMapType.Hybrid;
        }
        centerMapOnLocation(initialLocation)
        let unionLocation = Location(title: "Memorial Union", coordinate: CLLocationCoordinate2D(latitude: 39.167541, longitude: -86.522387), info: "Address: 900 E 7th St, Bloomington, IN 47408 n The student union on the campus. Was dedicated in June of 1932. As of date, it is the second largest student union, worldwide. Has multiple stages, offices, directors offices, and even a hotel in the building.")
        mapView.addAnnotation(unionLocation)
        let ashtonLocation = Location(title: "Ashton Residence Hall", coordinate:CLLocationCoordinate2D(latitude: 39.171550, longitude: -86.509768), info: "Address: 1800 E 10th St, Bloomington, IN 47408 n Includes single dorms only and is located in central neighborhood.")
        mapView.addAnnotation(ashtonLocation)

如果您能告诉我们如何或在哪里保存这些引脚,那将非常有帮助。你有一个动态添加引脚的后端吗?或者它们在你的应用程序中是"硬编码"的?首先,您需要一些保存机制,以便代码的其他部分能够访问该数据。

如果您使用API动态地将它们保存到数据库中,那么最好的方法是开发一种方法来获取搜索参数并返回结果。

如果管脚保存到应用程序附带的数据库或文件中,则需要适当的方法从任何文件、格式或数据库中查询这些管脚。

最新更新