ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 3

Оффлайновые карты

В предыдущих примерах я продемонстрировал работу с картами. В основном эта работа заключалась в использовании класса MKMapView. Это отличный класс, любезно предоставленный нам компанией Apple, но он имеет один недостаток. Дело в том, что картинки для карт беруться только с интернета и их нельзя сохранить. Для выхода с этой ситуации воспользуемся классом RMMapView. Это проект с открытым исходным кодом, который можна скачать отсюда. Основная проблема с которой сталкиваются программисты при использовании вышеупомянутой библиотеки — это ее добавление в проект. Информация, которая указана в описании библиотеки, о том, как ее портировать либо устарела, либо никогда не работала.

 

Перейдем от теории к делу. В первую очередь скачайте саму библиотеку (сделать это можно перейдя по вышеуказаной ссылке или с нашего сайта). Архив библиотеки будет иметь три папки (MapView, Proj4 и samples). В последней папке находятся примеры работы с RMMapView, нас же интересуют первые две. Теперь создадим проект на основе шаблона Single View Application и назовем его OfflineMaps. Следующее, что нам нужно сделать — это скопировать вот те интерисующие нас папки с архива в каталог нашего проекта. Обращаю ваше внимание на то, что мы не добавляем баблиотеку route-me в наш проект подобно тому как раньше добавляли картинки и другие файлы. После всех манипуляций каталог проекта должен выглядеть вот так:

 

 

Если все сделано правильно — открываем наш проект, нажимаем левой кнопкой вышки на имя проекта в инспекторе файлов и выбераем пункт меню Add Files to «OfflineMaps»…

 

 

Перед нами откроется знакомое окно выбора файлов. В нем следует выбрать файл MapView.xcodeproj, который находиться в каталоге MapView (каталог Proj4 не трогаем). Обратите внимание на значения флажков обведенные красной линией.

 

 

Если все сделано правильно ваш проект должен выглядеть вот так:

 

 

Но на этом работа с интегрированием библиотеки не закончена. Следующее, что нам прийдется сделать — это добавить фреймверки.

 

  • libsqlite3.dylib
  • QuartzCore.framework
  • CoreLocation.framework

 

Как это делать я описал здесь.

 

Теперь в списке целей выберите наш проект, перейдите в меню Build Phases, разверните список Target Dependencies и нажмите на кнопку с плюсиком.

 

 

После этого перед вами откроется окошко, в котором следует выбрать MapView и нажать кнопку Add:

 

 

Не перходя в другой раздел меню, разверните список Link Binary With Libraries (скорее всего, он у вас остался развернут после добавления фреймверков). В нем так же нажмите на кнопку с плюсиком и в появившемся окне выберите libMapView.a:

 

 

Наш проект уже компилируется без ошибок, но использовать класс RMMapView еще не получится. Это связано с тем, что компилятор не знает, где искать этот файл. То есть, нам нужно указать путь к файлу RMMapView.h. Для этого в списке целей выберем наш проект, перейдем в раздел Build Settings и там найдем пункт User Header Search Paths. Дабавим в этот пункт следующую строку:${SRCROOT}/MapView. На этом «танци с бубном» заканчиваются. Можно перейти к процессу программирования.

 

Внесем изменения в класс ViewController:

 

ViewController.h

<code data-result="[object Object]">#import &lt;UIKit/UIKit.h&gt;
#import "RMMapView.h"

@interface ViewController : UIViewController &lt;RMMapViewDelegate&gt;

@property (nonatomic, retain) IBOutlet RMMapView * mapView;

@end</code>

 

ViewController.m

<code data-result="[object Object]">#import "ViewController.h"

@implementation ViewController

@synthesize mapView;

- (void)dealloc 
{
    self.mapView = nil;
    [super dealloc];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.mapView = nil;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [RMMapView class];    
    mapView.delegate = self;
}

@end</code>

 

Осталось лиш связать объект mapView с объектом интерфейса. Для этого добавьте обычный вьюв в ViewController.xib, а в имени класса укажите RMMapView.

 

 

После этого можно настроить связь (кто забыл как это делается — можно почитать здесь).

 

Исходный код этого проекта можно сказать здесь.

Comments are closed.