2012-08-14 8 views
0

iOS 응용 프로그램에서 작업 중이고 Apple에서 제공하는 Breadcrumb iOS Mapkit 경로 기능을 기능 중 하나로 포함하고자합니다. 나는 스토리 보드에 UIViewController를 만들었고 (탭 바 컨트롤러에서 탭으로) MKMapView를 삽입했다. 아래에 표시된 ThirdViewController의 콘센트에도 연결했습니다. 수업은 아래와 같습니다. CrumbPath 클래스와 CrumbPathView는 Breadcrumb 예제에서와 똑같습니다. http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.htmlMKOverlay 경로가 Apple Breadcrumb iOS 코드에서 작동하지만 내 응용 프로그램에서는 작동하지 않습니다.

동일한 코드로도 내 응용 프로그램에는 mkoverlay 경로가 표시되지 않습니다. 여기서 중요한 것을 놓치고 있습니까? 나는 iOS 프로그래밍에 경험이 없으며 기초적인 것을 놓쳤을지도 모른다. 당신은 당신의 스토리 보드에 MKMapView이 때문에 mapView:viewForOverlay:가 호출되고 있지 않았다에게 위임와 같은 ThirdViewController가 설정되어 있지 않은 ThirdViewController.h

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

#import "CrumbPath.h" 
#import "CrumbPathView.h" 

@interface ThirdViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> 
{ 

@private 
    MKMapView *map; 

    CrumbPath *crumbs; 
    CrumbPathView *crumbView; 

    CLLocationManager *locationManager; 

} 

@property (nonatomic, retain) IBOutlet MKMapView *map; 
@property (nonatomic, retain) CLLocationManager *locationManager; 
@end 

ThirdViewController.m

#import "ThirdViewController.h" 

@interface ThirdViewController() 
@end 

@implementation ThirdViewController 

@synthesize locationManager, map; 

- (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.wantsFullScreenLayout = YES; 

    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    [self.locationManager startUpdatingLocation]; 

    [self.view addSubview:self.map]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 

    self.map = nil; 
    self.locationManager.delegate = nil; 
    self.locationManager = nil; 
} 

-(void) dealloc 
{ 

} 

- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - 
#pragma mark MapKit 

- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if(newLocation) 
    { 
     if((oldLocation.coordinate.latitude != newLocation.coordinate.latitude) && (oldLocation.coordinate.longitude != newLocation.coordinate.longitude)) 
     { 
      if(!crumbs) 
      { 
       crumbs = [[CrumbPath alloc] initWithCenterCoordinate:newLocation.coordinate]; 
       [map addOverlay:crumbs]; 

       MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 2000, 2000); 
       [map setRegion:region animated:YES]; 
      } 
      else 
      { 
       MKMapRect updateRect = [crumbs addCoordinate:newLocation.coordinate]; 

       if(!MKMapRectIsNull(updateRect)) 
       { 
        MKZoomScale currentZoomScale = (CGFloat)(map.bounds.size.width/map.visibleMapRect.size.width); 

        CGFloat lineWidth = MKRoadWidthAtZoomScale(currentZoomScale); 
        updateRect = MKMapRectInset(updateRect, -lineWidth, -lineWidth); 

        [crumbView setNeedsDisplayInMapRect:updateRect]; 
       } 
      } 
     } 
    } 
} 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay 
{ 
    if(!crumbView) 
    { 
     crumbView = [[CrumbPathView alloc] initWithOverlay:overlay]; 
    } 
    return crumbView; 
} 
@end 
+1

스토리 보드의 MKMapView에 대한 대리인으로 ThirdViewController를 설정 했습니까? – jonkroll

+0

나는이 모든 것들을 점검하는 것을 확실히 개선해야한다. 지금 연결했는데 오버레이가 표시됩니다. 고마워요! – Sap

+0

어떻게이 질문을 닫고 대답 할 수 있습니까? – Sap

답변

1

. 대리자 속성을 설정하면 문제가 해결됩니다.