2012-04-05 3 views
3

Я пытаюсь добавить следующие вещи в приложение Route-Me.iOS Route-Me: Добавить маркер местоположения пользователя

  • Добавить маркер в исходном местоположении
  • Переместить карту в месте
  • пользователя
  • Переместите маркер в это новое место

Я использую простой пример из MapBox Ios например, поскольку мои карты находятся в автономном хранилище mbtiles.

Это мой файл заголовка:

#import <UIKit/UIKit.h> 

#import "RMMapView.h" 
#import "RMMarker.h" 
#import "RMMapViewDelegate.h" 
#import "RMMarkerManager.h" 
#import "CoreLocation/CoreLocation.h" 

@interface MBTiles_ExampleViewController : UIViewController 
{ 
    RMMapView *mapView; 
} 

@property (nonatomic, retain) IBOutlet RMMapView *mapView; 
@property (nonatomic, retain) CLLocationManager *locationManager; 
@property (nonatomic, retain) CLLocation *currentLocation; 
@property (nonatomic, retain) RMMarkerManager *markerManager; 
@property (nonatomic, retain) RMMarker *locationMarker; 

@end 

И это мой файл реализации:

#define kStartingLat 30.0f 
#define kStartingLon -10.0f 
#define kStartingZoom 1.5f 

#import "MBTiles_ExampleViewController.h" 

#import "RMMBTilesTileSource.h" 
#import "RMMapContents.h" 
#import "RMMarker.h" 

#import "RMMarkerManager.h" 
#import "CoreLocation/CoreLocation.h" 


@implementation MBTiles_ExampleViewController 

@synthesize mapView; 
@synthesize currentLocation; 
@synthesize locationManager; 
@synthesize markerManager; 
@synthesize locationMarker; 



(void)viewDidLoad 
{ 
    CLLocationCoordinate2D startingPoint; 

    startingPoint.latitude = kStartingLat; 
    startingPoint.longitude = kStartingLon; 

    NSURL *tilesURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"control-room-0.2.0" ofType:@"mbtiles"]]; 

    RMMBTilesTileSource *source = [[[RMMBTilesTileSource alloc] initWithTileSetURL:tilesURL] autorelease]; 

    [[[RMMapContents alloc] initWithView:self.mapView 
           tilesource:source 
          centerLatLon:startingPoint 
           zoomLevel:kStartingZoom 
          maxZoomLevel:[source maxZoom] 
          minZoomLevel:[source minZoom] 
         backgroundImage:nil] autorelease]; 

    mapView.enableRotate = NO; 
    mapView.deceleration = NO; 

    mapView.backgroundColor = [UIColor blackColor]; 

    mapView.contents.zoom = kStartingZoom; 

    if (nil == locationManager) 
     locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 

    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    [locationManager startUpdatingLocation]; 


    UIImage *iconImage = [UIImage imageNamed:@"marker.png"]; 

    locationMarker = [[RMMarker alloc] initWithUIImage: iconImage]; 



    [markerManager addMarker: locationMarker AtLatLong: startingPoint]; 

} 

(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    [mapView moveToLatLong:newLocation.coordinate]; 

    RMLatLong newCoords = {newLocation.coordinate.latitude, newLocation.coordinate.longitude}; 

    if (nil != markerManager) 
     [markerManager moveMarker:locationMarker AtLatLon: newCoords]; 

} 

(void)dealloc 
{ 
    [mapView release]; 

    [super dealloc]; 
} 

@end 

marker.png была добавлена ​​в папку Мои ресурсы.

Так мои вопросы

  1. Почему мой исходный маркер не показывает?
  2. Я использую xcode на SnowLeopard, так что симулятор действительно может найти мое местоположение? Поскольку карта не перемещается.

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

+0

Добавить NSLog (@ «Текст идет здесь»); линии для вывода отладочной информации по всему вашему коду. Вы хотите проверить, какое местоположение вы хотите отобразить, независимо от того, является ли изображение нулевым, размер изображения, независимо от того, вызван ли ваш код вызовом и т. Д. –

ответ

0

Что касается вашего второго вопроса, то из яблока документов:

В Xcode 4.0 и 4.1, можно смоделировать только текущее местоположение в приложении. Начиная с Xcode 4.2 вы можете имитировать местоположения, отличные от вашего текущего местоположения, в приложениях iOS, которые используют Core Location. Чтобы установить местоположение, выберите «Редактировать схему» из селектора схем на панели инструментов, выберите «Запустить» и перейдите на вкладку «Параметры». Вы можете выбрать местоположение из меню Расположения

http://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_2.html

+0

кажется, что xcode 4.2 - это путь вперед, но до тех пор есть другое решение? – tjmgis

0

я смог получить работу после очистки маркеров после переезда.

marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"marker.png"] anchorPoint:CGPointMake(0.5f, 1.f)]; 
[mapView.contents.markerManager addMarker:marker AtLatLong:locPoland]; 
[mapView.contents.markerManager moveMarker:marker AtLatLon:locWawa]; 
[mapView.markerManager moveMarker:marker AtLatLon: locUser]; 
[mapView moveToLatLong:locUser]; 
marker = nil; 

 Смежные вопросы

  • Нет связанных вопросов^_^