2016-04-10 1 views
0

建物に関する情報を含むアラートをクリックすると追加されたピンを持つアプリを作成しています。ユーザーがこれらの場所を検索できるようにしたいが、コードが見つからないため可能かどうかわからない。これを行う方法や提案があれば教えてください。ユーザーが地図を検索してすぐに固定された場所を確認することは可能ですか

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) 

答えて

0

これらのピンを保存する方法や場所を教えてください。あなたはあなたのピンを動的に追加するバックエンドを持っていますか、あるいはあなたのアプリケーションに「ハードコーディングされていますか?まず、コードの他の部分がそのデータに到達できる保存メカニズムが必要です。

APIを使用してデータベースに動的に保存する場合は、検索パラメータを取得して結果を返すメソッドを開発するのが最善の方法です。

アプリケーションで出荷されるデータベースまたはファイルにピンが保存されている場合は、これらのピンをファイル、フォーマットまたはデータベースから問い合せる適切な方法が必要です。

関連する問題