gpt4 book ai didi

objective-c - 使用 MapKit 和 UIGestureRecognizer 在触摸时添加注释图钉

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:23 25 4
gpt4 key购买 nike

我在用户触摸 map 时添加注释时遇到了一些问题。

我正在使用 UIGestureRecognizer检测用户的触摸。

当检测到长按时,我调用这个函数:

- (void)handleLongPressGesture:(UIGestureRecognizer*)gestureRecognizer{
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) return;

NSLog(@"long press");

CGPoint touchPoint = [gestureRecognizer locationInView:mapView];
CLLocationCoordinate2D touchMapCoordinate =
[mapView convertPoint:touchPoint toCoordinateFromView:mapView];

RdvAnnotation *rdvAnnotation = [[RdvAnnotation alloc] init];

[rdvAnnotation initWithCoordinate:touchMapCoordinate];

[mapView removeAnnotations:mapView.annotations];

[mapView addAnnotation:rdvAnnotation];

[rdvAnnotation release]; }

我可以在控制台中看到 NSLog 和 rdvAnnotation用好的坐标初始化。

我不明白为什么我在 map 上看不到我的注释。

这是我的 - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation方法:

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;

if ([annotation isKindOfClass:[RdvAnnotation class]])
{
static NSString* RdvAnnotationIdentifier = @"rdvAnnotationIdentifier";
MKPinAnnotationView* pinView = (MKPinAnnotationView *)
[mapView dequeueReusableAnnotationViewWithIdentifier:RdvAnnotationIdentifier];

if (!pinView)
{
MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:RdvAnnotationIdentifier] autorelease];
customPinView.pinColor = MKPinAnnotationColorPurple;
customPinView.animatesDrop = YES;
customPinView.canShowCallout = YES;

return customPinView;

}
else
{
pinView.annotation = annotation;
}
return pinView;
}
return nil;}

我的 viewDidLoad方法:

- (void)viewDidLoad {
[super viewDidLoad];

mapView = [[MKMapView alloc] initWithFrame:self.view.frame];
[mapView setShowsUserLocation:TRUE];
[mapView setMapType:MKMapTypeStandard];
[mapView setDelegate:self];

CLLocationManager *locationManager=[[CLLocationManager alloc] init];

[locationManager setDelegate:self];

[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];

[locationManager startUpdatingLocation];

self.navigationItem.title = @"Rendez-vous" ;
}

最佳答案

我刚刚注意到一些看起来很奇怪的东西:

RdvAnnotation *rdvAnnotation = [[RdvAnnotation alloc] init];
[rdvAnnotation initWithCoordinate:touchMapCoordinate];

您在注释对象上调用了两次 init。你应该这样做:

RdvAnnotation *rdvAnnotation = [[RdvAnnotation alloc] initWithCoordinate:touchMapCoordinate]];

编辑:如果您不想丢失 init 方法中的代码,请保留 init 并更改坐标属性的值:

RdvAnnotation *rdvAnnotation = [[RdvAnnotation alloc] init];
rdvAnnotation.coordinate = touchMapCoordinate;

关于objective-c - 使用 MapKit 和 UIGestureRecognizer 在触摸时添加注释图钉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10410431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com