6

所以 MKAnnotation 的 centerOffset 属性似乎不适用于 iOS7 以处理自定义注释图像......下面是在 iOS6(工作)和 iOS7(不工作)中拍摄的图像。

各位大佬知道这个问题是什么原因吗?有什么解决办法吗?

并不是 iOS7 中的 centerOffset 值不正确,而是偏移量不会改变它接收到的任何值。

iOS6 IOS 7

编辑:示例代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    MapAnnotation *ann = [[MapAnnotation alloc] initWithName:@"Some annotation" latitude:46.910068 longitude:17.881984 tag:1 type:MAP_ANNOTATION_TYPE_REQUEST];
    self.mapView.delegate = self;
    [self.mapView addAnnotation:ann];

    MKCircle *circle = [MKCircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(46.910068, 17.881984) radius:10];
    [self.mapView addOverlay:circle];

}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay {

    if ([overlay isKindOfClass:[MKCircle class]]) {

        MKCircleView *cv = [[MKCircleView alloc] initWithCircle:overlay];
        cv.fillColor = [UIColor colorWithRed:247/255.f green:85/255.f blue:86/255.f alpha:0.2];
        cv.lineWidth = 1;
        cv.strokeColor = [UIColor colorWithRed:247/255.f green:85/255.f blue:86/255.f alpha:1.0];
        return cv;
    }

    return nil;
}

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

    //Annotations
    MKPinAnnotationView *pinAnnotation = nil;
    if(annotation != self.mapView.userLocation)
    {
        // Dequeue the pin
        static NSString *defaultPinID = @"myPin";
        pinAnnotation = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinAnnotation == nil )
            pinAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID];

        pinAnnotation.image = [UIImage imageNamed:@"subscription-map-icon"];
        pinAnnotation.centerOffset = CGPointMake(0, -20);
    }

    return pinAnnotation;
}

MapAnnotation是一个简单的注释类,具有一些不相关的属性。

4

1 回答 1

21

编辑:

正如@Anna Karenina 让我意识到的那样,我使用的是 MKPinAnnotationView 而不是 MKAnnotationView。显然 MKPinAnnotation 在 centerOffset 中有一个烘焙,这就是奇怪行为背后的原因。

原始答案:

对于任何有同样问题的人,这似乎是 iOS7 中的一个错误。

解决方法:

子类化MKAnnotationView并覆盖属性。setter methodcenterOffset

.h 头文件中没有新内容,这就是 .m 实现文件的样子:

#import "MyAnnotationView.h"

@implementation MyAnnotationView
@synthesize centerOffset = _centerOffset;

-(id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setCenterOffset:(CGPoint)centerOffset {
    _centerOffset = centerOffset;
}

@end

不要错过@synthesize顶部的部分!

于 2013-11-05T16:38:11.597 回答