Почему наложение не отображается для приложения iPhone в Xcode 4? - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь следовать инструкциям наложения, приведенным здесь: https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html#//apple_ref/doc/uid/TP40009497-CH6-SW15+

но наложение не отображается. Вот шаг за шагом из того, что я сделал до сих пор:

1.) Добавлен новый объект View Controller в раскадровку
2.) Добавлен объект вида карты в новый контроллер вида
3.) Пошел в File, New, New File ..., подкласс UIViewController, назвал его «MapViewController», который добавил три файла в мой проект: MapViewController.h, MapViewController.m и MapViewController.xib
4.) Затем я пошел к контроллеру представления и определил его класс как MapViewController
5.) Затем «Control» + щелкнул объект MKMapView в MapViewController.h, который создал: «@property (слабый, не атомарный) IBOutlet MKMapView * MKPolygonView;
6.) Затем я добавил соответствующий код в мои файлы .h и .m, чтобы отразить пример, который я включу в копию ниже

Когда я запускаю симулятор iOS, карта отображается, но наложение не отображается. Что я делаю не так?

MapViewController.h:

//
//  MapViewController.h
//  GeoShapes
//
//  Created by Template User on 4/1/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

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

@interface MapViewController : UIViewController <MKMapViewDelegate> {

    IBOutlet MKMapView *map;

}

@property (weak, nonatomic) IBOutlet MKMapView *MKPolygonView;


@end

MapViewController.m:

//
//  MapViewController.m
//  GeoShapes
//
//  Created by Template User on 4/1/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "MapViewController.h"

@implementation MapViewController
@synthesize MKPolygonView;

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

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [self setMKPolygonView:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;

    // 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";

    [map addOverlay:poly];
}

- (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;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Переместите приведенный ниже код в viewDidUnload в viewDidLoad:

[self setMKPolygonView:nil];

// 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";

[map addOverlay:poly];
1 голос
/ 02 апреля 2012

Я думаю, вы поместили код в viewDidUnload, который принадлежит viewDidLoad.Вы добавляете оверлей, когда представление выгружается, что, вероятно, не соответствует вашим ожиданиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...