Отобразить в вашем приложении карту можно используя класс MKMapView из фраемворка MapKit. Класс представляется множеством очевидных методов: mapType, zoomEnabled, region, showUserLocation, которые настраивают внешний вид карты. Но это все просто, мне было интересно добавлять на карту свои объекты. С этим мы и будем разбираться в данной статье.
Для добавления на карту элемента привязанного к одной геокоординате используется метод addAnnotation:. В качестве аргумента он принимает объект который наследует протокол MKAnnotation. Протокол реализует методы задания координаты нашей аннотации (coordinate), задание заголовка аннотации (title) и ее текста (subtitle). Вот самый простой пример объекта аннотации:
marker.h
- @interface marker : NSObject <MKAnnotation>
- {
- }
- @end
marker.m
- #import "marker.h"
- @implementation marker
- #pragma mark MKAnnotation
- - (CLLocationCoordinate2D) coordinate
- {
- return CLLocationCoordinate2DMake(46.462585, 30.750186);
- }
- - (NSString *) title
- {
- return @"This annotation";
- }
создадим экземпляр этого объекта и добавим его на карту:
- marker *m = [[marker alloc] init];
- [mapView addAnnotation:m];
- [m release];
довольно просто, правда ведь? Если мы хотим кустимизировать нашу аннотацию, например изменить иконку иголочки, то нам необходимо использовать метод mapView:viewForAnnotation: делегата нашей карты, пример приведен в конце статьи.
Пусть теперь мы хотим нарисовать на карте объект привязанный к нескольким геокоординатам (например маршрут из точки А в точку В). Тут нужно добавлять не аннотацию, а оверлей addOverlay:. Добавим в него MKPolyline:
- CLLocationCoordinate2D mapCoords[6];
- mapCoords[ 0] = CLLocationCoordinate2DMake(46.476472, 30.704776);
- mapCoords[ 1] = CLLocationCoordinate2DMake(46.469664, 30.732229);
- mapCoords[ 2] = CLLocationCoordinate2DMake(46.462585, 30.750186);
- mapCoords[ 3] = CLLocationCoordinate2DMake(46.447197, 30.743040);
- mapCoords[ 4] = CLLocationCoordinate2DMake(46.415384, 30.723226);
- mapCoords[ 5] = CLLocationCoordinate2DMake(46.409143, 30.729909);
- MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:mapCoords count:6];
- [mapView addOverlay:polyLine];
- [mapView setDelegate:self];
и в делегате нашей карты зададим свойства этой линии
- - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
- {
- MKPolylineView *polylineView = [[[MKPolylineView alloc] initWithOverlay:overlay] autorelease];
- polylineView.strokeColor = [UIColor blueColor];
- polylineView.lineWidth = 3.0;
- return polylineView;
- }
Пример проекта.
Так же смотрите:
- Конвертирование "человеческого" адреса в широту и долготу
Если я не ошибаюсь, это было добавлено только в iOS 4, но расписано все хорошо, Вы мне очень помогли :) Спасибо!
ОтветитьУдалитьAlexandr
ОтветитьУдалитьМаркеры на карте в iPhone OS 3.0 тоже можно было ставить. В iOS 4 добавили возможность добавлять свои вью (MKOverlay).