【问题标题】:iOS7: MKAnnotation centerOffset?iOS7:MKAnnotation centerOffset?
【发布时间】:2013-11-07 04:23:10
【问题描述】:

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

你们知道是什么导致了这个问题吗?有什么解决办法吗?

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

编辑:示例代码:

- (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 是一个简单的注解类,有一些不相关的属性。

【问题讨论】:

  • 我无法复制这个问题(在 iOS 7 中 centerOffset 似乎没问题)。如果您愿意,请使用无效的代码更新问题。在 viewForAnnotation 中,您是否可能创建了一个 MKPinAnnotationView 并设置其图像(而不是创建一个简单的 MKAnnotationView 这是正确的做法)? MKPinAnnotationView 只能用于标准引脚,您不应该设置它们的图像。
  • 我在从头开始一个项目并实现准系统 viewForAnnotation 时收到此错误事件。我在上面更新了我的问题。
  • 正如我所说,在 viewForAnnotation 中,使用自己的图像时创建一个普通的 MKAnnotationView。不要创建 MKPinAnnotationView
  • 哦,你说得对,我还没看完你的评论。谢谢!
  • 遇到了同样的问题并用你的答案解决了。谢谢@ZoltánMatók。

标签: ios dictionary ios7 mkannotation


【解决方案1】:

编辑:

@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 部分!

【讨论】:

  • 原始答案是我让 MKAnnotationView 在 ios7 中移动的唯一方法。
  • 如果可以的话,我会投票两次。从使用 MKPinAnnotationView 切换到 MKAnnotationView 并错过了一次更改它。
  • 同样的事情:P 我使用的是“MKPinAnnotationView”“MKAnnotationView”FACEPALM!
  • 是的。我的代码中的确切错误是 MKAnnotationView *annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomAnnotation"];感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多