首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS7.1 MKMapView selectAnnotation问题

iOS7.1 MKMapView selectAnnotation问题
EN

Stack Overflow用户
提问于 2014-04-11 22:15:50
回答 1查看 378关注 0票数 3

因此,自从iOS7.1问世以来,当用户点击地图时,我的代码在选择地图上的新注释时就一直存在问题。代码在iOS6和7上都能找到,但在7.1上就搞砸了。

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

我的头只包含以下内容:

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface MAViewController : UIViewController <MKMapViewDelegate>

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

@end

我的实现文件如下:

代码语言:javascript
复制
#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

我只是在故事板中添加了一个MKMapView,仅此而已。感谢你分享你对这个问题的看法。

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

EN

回答 1

Stack Overflow用户

发布于 2014-07-08 14:59:23

我知道这个问题是两个月前提出的,但我现在也面临着同样的问题。

目前,我正在使用一种变通方法,在将注释添加到mapView之后,选择注释时会有一个小小的延迟。这似乎适用于延迟>= 0.4s。但当延迟小于0.4s时,它会在选择后立即取消选择。非常奇怪:

代码语言:javascript
复制
//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];

和helper方法:

代码语言:javascript
复制
-(void)selectLastAnnotation{
    [self.mapView selectAnnotation:self.lastAnnotation animated:YES];
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23015140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档