gpt4 book ai didi

objective-c - iOS7.1 MKMapView selectAnnotation问题

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:45 26 4
gpt4 key购买 nike

自从 iOS7.1 发布以来,当用户点击 map 时,我的代码在选择 map 上的新注释时一直存在问题。该代码适用于 iOS6 和 7,但在 7.1 上出现问题。

我没有找到关于这个问题的任何具体信息,但这是我用来说明问题的非常简单的代码。

我的标题只包含这个:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface MAViewController : UIViewController <MKMapViewDelegate>

@property (strong, nonatomic) IBOutlet MKMapView *mMapView;

@end

我的实现文件如下:

#import "MAViewController.h"

@interface MAViewController ()

@end

@implementation MAViewController

@synthesize mMapView;

- (void)viewDidLoad
{
[super viewDidLoad];

[self.mMapView setDelegate:self];
[self.mMapView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mapTapped:)]];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

- (void)mapTapped:(UITapGestureRecognizer *)recognizer
{

CGPoint touchPoint = [recognizer locationInView:self.mMapView];
CLLocationCoordinate2D touchMapCoordinate = [self.mMapView convertPoint:touchPoint toCoordinateFromView:self.mMapView];
CLLocation *lTapLocation = [[CLLocation alloc] initWithLatitude:touchMapCoordinate.latitude longitude:touchMapCoordinate.longitude];

[self.mMapView removeAnnotations:mMapView.annotations];

MKPointAnnotation *lAnnotation = [[MKPointAnnotation alloc] init];
lAnnotation.coordinate = lTapLocation.coordinate;
lAnnotation.title = @"TAP";

[self.mMapView addAnnotation:lAnnotation];
}

#pragma mark - MapView Delegate

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {

if([annotation isKindOfClass: [MKUserLocation class]]) {
return nil;
}

MKPinAnnotationView *lPin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
lPin.canShowCallout = FALSE;

return lPin;
}

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
MKAnnotationView *lAnnotationView = (MKAnnotationView*)[views objectAtIndex:0];
lAnnotationView.canShowCallout = YES;

if ([lAnnotationView.annotation isKindOfClass:[MKUserLocation class]]) {
return;
}

[mapView selectAnnotation:lAnnotationView.annotation animated:YES];
}

@end

我只是在 Storyboard中添加了一个 MKMapView,仅此而已。感谢您就此问题分享您的想法。

问题是,注释被选中和取消选中,用户需要再次点击它才能显示标题。

最佳答案

我知道这个问题是两个月前提出的,但我目前正面临同样的问题。

目前,我正在使用一种变通方法,即在将注释添加到 mapView 后,我会稍微延迟地选择注释。这似乎适用于 >= 0.4s 的延迟。但是如果延迟 < 0.4s,它会在选择后立即被取消选择。很奇怪:

//In the onClick handler
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = tapCoord;
self.lastAnnotation = annotation;
[self.mapView addAnnotation:annotation];
[self performSelector:@selector(selectLastAnnotation) withObject:nil afterDelay:0.4];

和辅助方法:

-(void)selectLastAnnotation{
[self.mapView selectAnnotation:self.lastAnnotation animated:YES];
}

关于objective-c - iOS7.1 MKMapView selectAnnotation问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23015140/

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