在按钮推送的地图上滴针 - iOS

时间:2012-02-10 18:48:09

标签: iphone ios mkmapview

虽然我的最终项目不是另一个我停放app的地方。我认为这是一个很好地掌握MKMapLocations的好地方。

好的,我可以设置别针,看看自己,让我当前的位置显示在标签上。

我不能做的是:

一个。按下按钮
      1)存储用户当前位置。       2)在当前用户位置放下一个引脚(红色)。            (因此,即使用户(蓝色)移动,新引脚也会停留)

B中。单独按下按钮       1)清除用户掉针(红色)的地图。

我似乎无法为按钮中的新引脚设置地图注释。数字改变了,地图没有刷新(我猜是)用它来显示我的引脚或没有正确的一组坐标。

这是我到目前为止所做的。 (没有消息):P

#import "Find_My_CarViewController.h"
#import "MapAnnotation.h"

@implementation Find_My_CarViewController

@synthesize CLController;
@synthesize hereIamLat;
@synthesize hereIamLong;
@synthesize mapView;

- (void)dealloc
{
    [hereIamLat release];
    [hereIamLong release];
    [CLController release];
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
    CLController = [[CoreLocationController alloc] init];
    CLController.delegate = self;
    [CLController.locMgr startUpdatingLocation];  
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(void)viewWillAppear:(BOOL)animated
{
    MKCoordinateRegion region;
    region.center.latitude =40.798356;
    region.center.longitude= -81.411158;
    region.span.longitudeDelta=0.3;
    region.span.latitudeDelta =0.3;
    [mapView setRegion:region animated:YES];   
}

- (void)locationUpdate:(CLLocation *)location
{
    latitudeLabel.text = [NSString stringWithFormat:@"LATITUDE: %f", location.coordinate.latitude];
    longitudeLabel.text = [NSString stringWithFormat:@"LONGITUDE: %f", location.coordinate.longitude];

    //hereIamLat = [NSString stringWithFormat:@"%g", location.coordinate.latitude];
    //hereIamLong = [NSString stringWithFormat:@"%g", location.coordinate.longitude];   
}

- (void)locationError:(NSError *)error
{
//speedLabel.text = [error description];
}

-(IBAction)PushToMark
{
    NSScanner *strLat = [NSScanner scannerWithString:latitudeLabel.text];
    double dblLat;
    [strLat scanDouble:&dblLat];
    NSScanner *strLong = [NSScanner scannerWithString:longitudeLabel.text];
    double dblLong;
    [strLong scanDouble:&dblLong];

    NSLog(@"lat: %f",dblLat);
    NSLog(@"long: %f",dblLong);
    MKCoordinateRegion location1;
    location1.center.latitude =dblLat;
    location1.center.longitude= dblLong;
    location1.span.longitudeDelta=0.1;
    location1.span.latitudeDelta =0.1;

    MapAnnotation *ann1 =[[[MapAnnotation alloc] init] autorelease];
    ann1.title=@"Here";
    ann1.subtitle=@"I AM";
    ann1.coordinate= location1.center;
    [mapView addAnnotation:ann1];
}

@end

编辑: 好的,所以我走了这条路谢谢。

#import "LocationTestViewController.h"
#import "CoreLocation/CoreLocation.h"
#import "MapAnnotation.h"

@implementation LocationTestViewController
@synthesize locationManager;
@synthesize mapView;

- (void)dealloc
{
[mapView release];
[locationManager release];
[super dealloc];
} 

- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
 [super viewDidLoad];
}
*/

- (void)viewDidUnload
{
[self setMapView:nil];
[self setLocationManager:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)getLocation:(id)sender {


locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter=kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];

[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
MKCoordinateRegion region = {{0.0,0.0},{0.0,0.0}};
region.center.latitude = locationManager.location.coordinate.latitude;
region.center.longitude = locationManager.location.coordinate.longitude;
region.span.longitudeDelta = 0.005f;
region.span.latitudeDelta = 0.005f;
[mapView setRegion:region animated:YES];
[mapView setDelegate:sender];

MKCoordinateRegion location1;
location1.center.latitude =locationManager.location.coordinate.latitude;
location1.center.longitude= locationManager.location.coordinate.longitude;
location1.span.longitudeDelta=0.1;
location1.span.latitudeDelta =0.1;

MapAnnotation *ann1 =[[[MapAnnotation alloc] init] autorelease];
ann1.title=@"You Parked Here";
ann1.subtitle=@"";
ann1.coordinate= location1.center;
[mapView addAnnotation:ann1];

}
@end

2 个答案:

答案 0 :(得分:0)

在视图控制器的@property中存储对创建的注释的引用。要删除,请使用

[mapView removeAnnotation:self.ann1];
self.ann1 = nil;

此外,您扫描标签中的字符串以找出坐标的策略也很奇怪。为什么不使用位置,您也可以将其存储在变量中?

答案 1 :(得分:0)

为什么在获得委托回调CLLocationCoordinate2D时,不能使用- (void)locationUpdate:(CLLocation *)location存储当前位置?没有理由使用MKCoordinateRegionNSScanner

请改为:

- (void)locationUpdate:(CLLocation *)location
{
    latitudeLabel.text = [NSString stringWithFormat:@"LATITUDE: %f", location.coordinate.latitude];
    longitudeLabel.text = [NSString stringWithFormat:@"LONGITUDE: %f", location.coordinate.longitude];

    self.myLocation = location; // a property that stores the current location
}

然后在- (IBAction)pushToMark中,您可以使用self.myLocation作为坐标属性创建和添加注释。

至于删除注释 - 请参阅Mundi的答案。