拖动时MKAnnotation超出了mapview

时间:2014-01-07 12:04:42

标签: ios mkmapview mkannotation

我有一个里面有一个mapView的视图。我有一个自定义annotationView来标记用户位置。一切正常,但我已经意识到注释没有剪切到地图视图,因此,当我拖动地图时,它会越界。检查图片:

Befrore dragging

When dragging

mapView启用了剪辑子视图。我认为这是我第一次发现这种行为。也许我从来没有在一个更大的视图中放置一张地图。我顺便针对iOS7。

编辑:这是代码。我想,没什么不寻常的。

在这里,我添加了自定义注释:

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
static NSString *const kAnnotationIdentifier = @"DYNAnnotationView";
DYNAnnotationView *annotationView = (DYNAnnotationView *)
[mapView dequeueReusableAnnotationViewWithIdentifier:kAnnotationIdentifier];
if (! annotationView)
{
    annotationView = [[DYNAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:kAnnotationIdentifier];
}

[annotationView setAnnotation:annotation];

return annotationView;
}

这是自定义annotationView:

DYNAnnotation.h

#import <MapKit/MapKit.h>

@interface DYNAnnotationView : MKAnnotationView

- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier;


@end

DYNAnnotation.m

#import "DYNAnnotationView.h"

@implementation DYNAnnotationView


-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self)
{
    UIImage *image = [UIImage imageNamed:@"locationMark"];
    CGRect frame = [self frame];
    frame.size = [image size];
    [self setFrame:frame];
    [self setCenterOffset:CGPointMake(0.5f, 1.0f)];
    [self setImage:image];
}

return self;
}

1 个答案:

答案 0 :(得分:0)

行。毕竟解决方案很简单。我需要做的就是将mapView嵌入到另一个视图中,并将其剪辑子视图属性设置为YES。仍然不明白为什么地图视图不会处理这个问题。

希望这有助于某人。