2016-08-22 11 views
1

내 코드 :누르면 버튼 센터, 스위프트

제발 사람! 이 버튼을 작동시키는 방법!?! ??!

내가 원하는 기능을 갖추려면 @IBAction 대괄호에 무엇을 넣어야합니까?

import UIKit 
    import MapKit 
    import CoreLocation 

class MapViewController: UIViewController,MKMapViewDelegate, CLLocationManagerDelegate{ 



     @IBOutlet weak var mapView: MKMapView! 



     let locationManager = CLLocationManager() 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      //==========RegionLocation : ========= 

      // Init the zoom level 
      let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 31.30, longitude: 34.45) 
      let span = MKCoordinateSpanMake(125, 125) 
      let region = MKCoordinateRegionMake(coordinate, span) 
      self.mapView.setRegion(region, animated: true) 


      //====================================\\ 
     override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
     //Dispose of resources that can be re created. 

      } 

     //Mark : Location 

     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 



     { 
      let location = locations.last 

      let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 

      let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.06, longitudeDelta: 0.06)) 

      self.mapView.setRegion(region, animated: true) 

      self.locationManager.stopUpdatingLocation() 
     } 

     func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
     { 
      print("Errors: " + error.localizedDescription) 
     } 

     func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
      if annotation is MKUserLocation { 
       return nil 
      } 
      let reuseID = "pin" 
      var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseID) as? MKPinAnnotationView 
      if(pinView == nil) { 
       pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseID) 
       pinView!.canShowCallout = true 
       pinView!.animatesDrop = true 
       pinView!.rightCalloutAccessoryView = UIButton(type: UIButtonType.DetailDisclosure) as UIButton 
       let smallSquare = CGSize(width: 30, height: 30) 
       let button = UIButton(frame: CGRect(origin: CGPointZero, size: smallSquare)) 
       button.setBackgroundImage(UIImage(named: "Car"), forState: .Normal) 
       pinView?.leftCalloutAccessoryView = button 
      } 
      else 
      { 
       pinView!.annotation = annotation 
      } 


     return pinView 

    } 

하지만 버튼 작동 세그먼트에 넣을 때 아무 것도 발생하지 않습니다.

누구나 나를 안내 할 수 있습니다. 어떻게 사용자 중심점에 파란색지도를 표시 할 수 있습니까?

+0

당신의 plist 파일 안에 'requestAlwaysAuthorization'' requestWhenInUseAuthorization' 키를 추가하십시오 .. – vaibhav

+0

둘 중 하나만 사용 하시겠습니까? : O –

+0

모두를 추가 할 수 있습니다 .. – vaibhav

답변

1

올바른 방법으로 MKMapView을 사용하려면 다음 코드를 따르십시오.

// `viewDidLoad` method 
@IBOutlet weak var map: MKMapView! 
var locationManager: CLLocationManager! 

override func viewDidLoad() { 
     super.viewDidLoad() 

     // code for enable location seivices 
     if (CLLocationManager.locationServicesEnabled()) 
     { 
      locationManager = CLLocationManager() 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyBest 
      locationManager.requestAlwaysAuthorization() 
      locationManager.startUpdatingLocation() 
     } 
    } 

재정의 CLLocationManager.didUpdateLocations는 위치 관리자가 현재 위치를 검색 할 때 알림을받을하기 위해 (CLLocationManagerDelegate의 일부) 아래를 참조하십시오.

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    let location = locations.last as CLLocation 

    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)   
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 

    self.map.setRegion(region, animated: true) 
} 

는 메모을 가지고 : 당신의 목표는 아이폰 OS 8 인 경우, 당신은 위치 서비스가 작동하도록하기 위해 귀하의 Info.plist에서 NSLocationAlwaysUsageDescription 키를 포함해야합니다.

그냥 latlong을 저장하고 같은 패스 버튼 액션을 사용하여 사용자 정의 방식으로 지역을 설정하려면 여기

@IBAction func setMap(sender: UIButton) { 
    let center = CLLocationCoordinate2D(latitude: lat, longitude: long)   
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) 
    self.map.setRegion(region, animated: true) 
} 

Google map guidelines입니다. 및 useful tutorial

+0

아무 것도 작동하지 않습니다 ......... –

+0

코드를 더 공유 할 수 있습니까? – vaibhav

+0

나는 ......... –

0

필요한 것은지도보기를 현재 위치로 중앙에 배치하는 것입니다. 거의 수정하지 않고 vaibhab의 대답과 정확히 같습니다. 버튼을 생성하고 액션을 viewcontroller 클래스에 연결 한 다음 버튼의 IBAction에 동일한 코드를 복사합니다.

@IBAction func updateCurrentLocation(_ sender: AnyObject) { 

    if CLLocationManager.locationServicesEnabled() { 

     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.requestWhenInUseAuthorization() 
     locationManager.startUpdatingLocation() 
    } else { 

     // Alert to enable location services on iphone first 
    } 
} 

작은 코드 줄을 추가하여 사용자 위치의 파란색 표시를 나타낼 수 있습니다. func locationManager에서. 그냥 시뮬레이터 메뉴에서 사용자 지정 위치를 추가 시뮬레이터를 사용하는 경우

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) { 

    self.mapView.showsUserLocation = true 

} 

것이 있는지 확인합니다. 디버그 ---> 위치 ----> 사용자 정의 단지 위치 서비스가 설정에서 켜져 있는지 확인 진정한 모바일을 사용하여 ---> 일반 ----> 개인 정보 보호가

3

을 시도하는 경우
@IBAction func centerLocationButton(sender: UIButton) { 
    mapView.setCenterCoordinate(mapView.userLocation.coordinate, animated: true) 
} 
+0

고마워요 !! – grabury

관련 문제