Выделите аннотацию в виде карты - PullRequest
0 голосов
/ 26 января 2012

Для приложения для iPad у меня есть SplitView с табличным представлением на левой стороне, показывающим список ресторанов.На правой стороне есть MapView, показывающий аннотации этих ресторанов.

Я пытаюсь приблизиться к аннотации и как-то выделить ее, когда пользователь нажимает на соответствующий ресторан в таблице с левой стороны.

К сожалению, я не могу перезагрузить карту.

Любые предложения или идеи, как решить эту проблему?

Вот мой ViewDidLoad

- (void)viewDidLoad {

    NSString *docsDir;
    NSArray *dirPaths;

    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];

    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"smshipaddec2011.db"]];
    const char *dbpath = [databasePath UTF8String];

    MapViewAnnotation *newAnnotation;

    sqlite3_stmt *statement;

    if (sqlite3_open(dbpath, &smshdb2) == SQLITE_OK) {

        NSString *querySQL = [NSString stringWithFormat: @"SELECT vmapx, vmapy, vname, vsection FROM SMSHVENUES"];

        const char *query_stmt = [querySQL UTF8String];

        if (sqlite3_prepare_v2(smshdb2, query_stmt, -1, &statement, NULL) == SQLITE_OK) {

            while(sqlite3_step(statement) == SQLITE_ROW) {

                double latitude = sqlite3_column_double(statement, 0);
                double longitude = sqlite3_column_double(statement, 1);

                CLLocationCoordinate2D location;
                location.latitude = latitude;
                location.longitude = longitude;

                newAnnotation = [[MapViewAnnotation alloc] initWithTitle:[[NSString alloc] initWithUTF8String:
                                                                          (const char *) sqlite3_column_text(statement, 2)] andCoordinate:location];
                [mapView addAnnotation:newAnnotation];
                [newAnnotation release];

            } 

            sqlite3_finalize(statement);

        } 

        sqlite3_close(smshdb2);
    }



    mapView.showsUserLocation = YES;

    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 

    //this is Shanghai:
    region.center.latitude = 31.227849 ;
    region.center.longitude = 121.473770;

    region.span.longitudeDelta = 0.02f;
    region.span.latitudeDelta = 0.02f;

    [mapView setRegion:region animated:YES];

    [super viewDidLoad];

}

Теперь, когда кто-то нажимает на ячейку таблицы, запускается "configureView", который работает нормально.Но тогда я не знаю, как переместить карту, увеличить масштаб этой аннотации и, возможно, изменить цвет или сделать его больше.

- (void)configureView {

    // animate map
    // zoom to annotation
    // make it bigger or change colour

}

Очень ценю любую помощь.

1 Ответ

1 голос
/ 26 января 2012

MKMapView имеет простой API для этого:

В ответ на выбор вашего пользователя вы вызываете что-то вроде:

[mapView setRegion: animated:];

Регион должен быть соответствующим образом увеличен на объекте, который вы показываете.

...