iOS Route-Me:添加用户位置标记

时间:2012-04-05 13:53:44

标签: ios xcode marker route-me

我一直在尝试将以下内容添加到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. 我在SnowLeopard上使用xcode,那么模拟器真的可以找到我的位置吗?因为地图不动。
  3. 任何帮助都会很棒,因为我已经尝试了很多代码片段和教程,但没有一个已经完成了工作。

2 个答案:

答案 0 :(得分:0)

关于你的第二个问题,来自苹果文档:

在Xcode 4.0和4.1中,您只能模拟应用程序中的当前位置。从Xcode 4.2开始,您可以在使用Core Location的iOS应用程序中模拟除当前位置以外的位置。要设置位置,请从工具栏中的方案选择器中选择“编辑方案”,选择“运行”操作,然后单击“选项”选项卡。然后,您可以从“位置”菜单中选择一个位置

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

答案 1 :(得分: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;