2014-06-16 7 views
0

MKMapViewDelegate를 사용하는 간단한 방법을 작성했으며 xcode 5 시뮬레이터에서 사용자 위치를 표시하는 데 문제가 있습니다. 필자는 이전 뷰 컨트롤러의 단추를 누르고 해당 UIViewController 클래스를 만든 후에 코드를 실행해야한다는 것을 알고 있습니다. 그러나 버튼을 누르고지도 뷰가있는 View Controller를 스택에 푸시하면 줌이없고 위치가없는지도가 표시됩니다. 단일보기 독립 실행 형 앱과 동일한 코드를 실행하면 잘 작동합니다. 지도를 가져 와서 사용자의 현재 위치 (시뮬레이터의 샌프란시스코 본사)로 확대하거나 추가하려면 무엇을해야합니까? 여기에 제가 사용하는 코드가 있습니다.mapView 메서드는지도를 표시하지만 아무 것도 수행하지 않습니다.

헤더 :

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface SPMenuViewController : UIViewController <MKMapViewDelegate> 

@property (strong, nonatomic) IBOutlet MKMapView *myMapView; 

@end 

구현 : 나는 이전보기가 "푸시"SEGUE에 의해 연결되어있는 네비게이션 컨트롤러와있는 UIButton 클래스에 포함되는 것은 아니다 생각

#import "SPMenuViewController.h" 

@interface SPMenuViewController() 

@end 

@implementation SPMenuViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
} 
return self; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 
self.myMapView.delegate = self; 
[self.myMapView setShowsUserLocation:YES]; 
} 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation  *)userLocation 
{ 
// Coords 
CLLocationCoordinate2D myLocation = [userLocation coordinate]; 

// Zoom Region 
MKCoordinateRegion zoomRegion = MKCoordinateRegionMakeWithDistance(myLocation, 2500, 2500); 

// Show Location 
[self.myMapView setRegion:zoomRegion animated:YES]; 
} 

지도보기가 포함 된보기 컨트롤러. 감사합니다.

+0

myMapView IBOutlet이 스토리 보드의 맵보기 컨트롤에 실제로 연결되어 있는지 확인하십시오. – Anna

답변

0

중단 점을 설정하면 userLocation 값이 유효합니까?

설정 showsUserLocation : 예는 사용자 위치 가져 오기/표시를 처리해야하지만 위치가지도에 표시되는 것은 아닙니다. 위임 메서드에서 사용자 위치 및 zoomRegion을 설정 중이므로보기가 나타나기 전에 해당 메서드가 실제로 호출되는지 여부를 확인합니다. 초기 값을 가지고 있지 않을 수 있습니다.

didUpdateLocation 대신 viewDidLoad에서 초기 userLocation 및 zoomRegion을 설정하여 효과가 있는지 확인할 수 있습니다. 이 모든 것 같습니다 잘 작동해야합니다.

위치를 시뮬레이트하기위한 Xcode 설정이 누락 되었습니까? Current Location in the Simulator

+0

didUpdateUserLocation 메서드는 MKMapView의 showUserLocation을 사용할 때 호출되는 MKMapViewDelegate 메서드이며 별개의 명시적인 CLLocationManager는 필요하지 않습니다.지도 뷰는 자체 관리자를 내부적으로 사용합니다. – Anna

+0

좋아, 그것에 대해 궁금해 (따라서 ""및 "아마도"초기 반응에 "."비록 여전히 대리자 메서드를 호출하는 경우 궁금. 그것은 잘 작동해야합니다 ... – mc01

+0

그것은 작동하지 않습니다. 어떤 이유로 시뮬레이터는 매번 "위치 시뮬레이션"을하지 못합니다 ... 실제로는 지난 10 분 동안 작동했지만 현재는 "디버그"를 사용하여 매번 위치를 시뮬레이트합니다. 독립 실행 형 버전 디버그를 사용할 필요가 없었습니다.이 시점에서 내 코드인지 내 OS인지는 여전히 혼란 스럽습니다. 분명히 개인적인 문제인 XD – Corey