2012-01-29 20 views
5

मुझे मानचित्र पर एक MKOverlay प्रदर्शित करने की आवश्यकता है, लेकिन इसे वास्तव में प्रकट नहीं किया जा सकता है।कैसे करें: MKMapView पर MKOverlay प्रदर्शित करें

मैं एप्पल के Location Awareness Programming Guide से example का पालन कर रहा हूं और ओवरले प्रदर्शित नहीं होगा। किसी भी मदद की सराहना की जाएगी, यह पहला आईफोन ऐप है जिसे मैंने बनाया है, इसलिए मुझे कुछ आसान याद आ रहा है।

NavViewController.h

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

@interface NavViewController : UIViewController <MKMapViewDelegate> { 
} 
@property (weak, nonatomic) IBOutlet MKMapView *mapView; 

@end 

NavViewController.m

#import "MSUNavViewController.h" 
#import <CoreLocation/CoreLocation.h> 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
    { 
     MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay]; 

     aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
     aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; 
     aView.lineWidth = 3; 

     return aView; 
    } 
    return nil; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Define an overlay that covers Colorado. 
    CLLocationCoordinate2D points[4]; 

    points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116); 
    points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066); 
    points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981); 
    points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267); 

    MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4]; 
    poly.title = @"Colorado"; 

    [_mapView addOverlay:poly]; 
} 

स्टोरीबोर्ड:

storyboard

किसी भी कोडिंग सुझाव बहुत सराहना की जाएगी। धन्यवाद!

उत्तर

7

व्यू कंट्रोलर इंस्टेंस (शायद File's owner) में मैप व्यू के delegate को सेट करना सुनिश्चित करें।

इंटरफ़ेस बिल्डर में, मानचित्र दृश्य पर राइट-क्लिक करें, प्रतिनिधि के दाईं ओर खोखले सर्कल से खींचें, बाईं ओर फलक में प्लेसहोल्डर अनुभाग पर फ़ाइल के स्वामी आइकन पर खींचें।

स्टोरीबोर्ड के लिए, फ़ाइल के स्वामी के बजाय व्यू कंट्रोलर आइकन से कनेक्ट करें।

+0

मैं प्रतिनिधि नियंत्रक उदाहरण में प्रतिनिधि को वास्तव में कैसे सेट करूं? मैं इसके लिए नया हूं। – nslocum

+0

निब के मानचित्र दृश्य पर राइट क्लिक करें, पहले जांचें कि क्या MKMapView का संदर्भ आउटलेट नक्शा व्यू है - फ़ाइल का स्वामी, फिर जांच करें कि उसका 'प्रतिनिधि' आउटलेट 'फ़ाइल का स्वामी' है या नहीं। – ZhangChn

+0

ऐसा लगता है कि प्रतिनिधि सेट नहीं है और मैं यह नहीं समझ सकता कि इसे 'फ़ाइल के स्वामी' पर कैसे सेट किया जाए। इसके अलावा, मैं आईओएस 5 पर हूं, इसलिए फाइल का मालिक आइकन प्रकट नहीं होता है। – nslocum

0

शायद आप return nil; द्वारा - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay में aView को मारने से पहले else जोड़ने की कोशिश करो।

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
    { 
     MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay]; 

     aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; 
     aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; 
     aView.lineWidth = 3; 

     return aView; 
    } 
    else return nil; 
} 
+0

धन्यवाद, लेकिन यह समस्या नहीं थी। – nslocum

0

क्या आपने अपनी समस्या का समाधान किया? प्रतिनिधि के बगल में सर्कल से खींचें (अपने स्क्रीन शॉट में) सर्कल में जो कक्षा का नाम है .. इंस्पेक्टर में एक सेटिंग है जो आपको यह दिखाने की अनुमति देगी कि आप कहां हैं ..? आपको नक्शा को देखने के लिए नक्शा को केंद्र में देखने की ज़रूरत है। डीललोड लोड करें ताकि यह कोलोराडो पर प्रदर्शित हो ..