2012-11-03 4 views
0

내 앱이로드되는 동안 사용자 좌표를 찾고 싶습니다. 다음 코드를 구현했지만 반환 값은 0.000사용자 위치 -지도 뷰

mapView.showsUserLocation=YES; 

CLLocationCoordinate2D annotationCoordinate; 
annotationCoordinate.latitude=mapView.userLocation.location.coordinate.latitude; 
NSLog(@"%f",annotationCoordinate.latitude); 

알아낼 수 없었습니다. 어떤 도움이 필요합니까?

답변

1

먼저 사용자 위치를 검색하는 데 시간이 걸릴 것을 고려해야합니다. 또한 사용자가 응용 프로그램의 위치 서비스를 사용하지 못하도록 설정하거나 연결 서비스 중에 위치 서비스를 사용하지 못할 수도 있습니다. 따라서 애플리케이션 시작 절차를 다시 생각해 보는 것이 좋습니다.

MKMapViewDelegate 프로토콜의 mapView:didUpdateUserLocation: 방법을 살펴보십시오. 이 방법을 실행하면 위치 MKMapView 통해 사용할 수 있습니다. 이미 확인 사용자 위치지도보기를 열고 자하는 경우

UPDATE, 당신은 CLLocationManagerCLLocationManagerDelegate 사용을 고려할 수 있습니다. 이렇게하면 위치 서비스가 사용 가능한지 확인할 수 있으며 locationManager:didUpdateToLocation:fromLocation: 메서드가 실행 된 후지도보기를 열 수 있습니다.

는 완전한 정보를 위해 당신은 사용자의 위치보기 좌표를 얻을 수 Getting the User’s Location 프로그래밍 가이드

+0

내 아이디어는 처음에 사용자 위치에 주석을 배치하는 것입니다. 그래서 사용자 위치 좌표를 찾아야 만합니다. 귀하의 제안은 MKMapViewDelegate를 구현하는 것이지만, 지속적으로 회상합니다. 그것이 내가 원하지 않는 것입니다. 어떠한 제안? –

+0

답변 업데이트보기 – voromax

+0

세부 답변을 해주셔서 감사드립니다. 내 질문은 지금, 나는 CLLocationManager 및 대리인을 사용하고 있습니다. 어떻게하면 코드를 멈추게 할 수 있겠습니까? 잠자기 시간을두고 작업을 다시 시작하십시오. –

1

을 살펴 아래의 위임 방법을 사용해야 할 일을 부하를했다.

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    NSLog(@"coordinates = %f,%f", mapView.userLocation.coordinate.latitude, 
      mapView.userLocation.coordinate.longitude); 
} 

지도 객체가 그것이 내가 당신이 사용한다고 생각

+0

하지만 내 앱이로드되는 동안 사용자 위치를 표시하고 싶습니다. 이 델리게이트가 어떻게 호출 될까요? –

+0

위임을 연결하고 응용 프로그램이이 위임 메서드를 시작했을 때 내가 준 코드를 복사하여 붙여 넣으면 즉시 호출됩니다. 아무 것도 할 필요가 없습니다. – lionserdar

+0

Heres 'app doc의 설명 "showsUserLocation 속성이 YES로 설정되어있는 동안지도 뷰에서 새 위치 업데이트를 수신 할 때마다이 메서드가 호출됩니다.이 메서드는지도 뷰의 사용자 추적 모드가 MKUserTrackingModeFollowWithHeading 응용 프로그램이 백그라운드에서 실행중인 경우이 메서드는 호출되지 않습니다. 백그라운드에서 실행되는 동안 위치 업데이트를 수신하려면 Core Location framework을 사용해야합니다. " – lionserdar

0

작동합니다 그냥 테스트 대리자와 연결되어 있는지 확인합니다 :

CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    [locationManager startUpdatingLocation]; 
    [mapView setRegion:MKCoordinateRegionMake(locationManager.location.coordinate, MKCoordinateSpanMake(0.2, 0.2))]; 
    mapView.showsUserLocation = YES; 
    NSLog(@"%f",mapView.region.center.latitude); 
:

#import <CoreLocation/CoreLocation.h> 

다음의 viewDidLoad 방법에

+0

여전히 0을 반환합니다. –

1

1) FrameWork CoreLocation과 Mapki를 추가하십시오. ViewController.h에서 t
2)에서의 ViewController

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
@interface MapViewController : UIViewController<MKMapViewDelegate,CLLocationManagerDelegate> 
{ 
     CLLocationManager *locationManager; 
} 
@property (nonatomic, strong) IBOutlet MKMapView *mapView; 

3) 파일.m 파일

didUpdateUserLocation 지금
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.mapView.delegate = self; 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate=self; 
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
[locationManager startUpdatingLocation]; 
} 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{ 
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800); 
[self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES]; 
// Add an annotation 
MKPointAnnotation *point = [[MKPointAnnotation alloc] init]; 
point.coordinate = userLocation.coordinate; 
point.title = @"Where am I?"; 
point.subtitle = @"I'm here!!!"; 
[self.mapView addAnnotation:point];} 

4) 이제

참고 당신의 UI에서지도보기를 추가 : 선택 지도보기와 고토 속성 관리자CKECK 쇼 사용자 위치 표시 BEHAVIOR 아래

0

좋아요, 그래서 저는 그저 직접 고칠 수있었습니다. 아무도 당신에게 말하는 것은 당신이 info.plist에 키/값 쌍을 설정해야한다는 것입니다.

'정보 속성 목록'사전에 키를 추가해야하는 방법 (requestAlwaysAuthorization 또는 requestWhenInUseAuthorization)에 따라 다릅니다. 첫 번째 메소드의 경우 NSLocationAlwaysUsageDescription을 사용하고 두 번째 메소드의 경우 NSLocationWhenInUseUsageDescription을 사용합니다.

두 키의 값 필드는 사용자에게 표시하려는 문자열로 설정할 수 있습니다.

상단의 두 키는 우리가 찾고있는 것입니다. How it should look like

이제 확인을 묻는 대화 상자가 표시됩니다.

추 신 :이 튜토리얼에서는 인터넷의이 단계를 나열했지만 이러한 각 방법 (CLLocationManager의 requestWhenInUse)에 대한 설명서를 읽을 때 두 키가 없으면 아무 것도 표시되지 않는다는 것을 언급합니다.