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
스토리 보드의 MKMapView에 대한 대리인으로 ThirdViewController를 설정 했습니까? – jonkroll
나는이 모든 것들을 점검하는 것을 확실히 개선해야한다. 지금 연결했는데 오버레이가 표시됩니다. 고마워요! – Sap
어떻게이 질문을 닫고 대답 할 수 있습니까? – Sap