Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS7:mk注释中心偏移?_Ios_Dictionary_Ios7_Mkannotation - Fatal编程技术网

iOS7:mk注释中心偏移?

iOS7:mk注释中心偏移?,ios,dictionary,ios7,mkannotation,Ios,Dictionary,Ios7,Mkannotation,因此,MKAnnotation的centerOffset属性似乎无法在iOS7上使用自定义批注图像。。。 下面是在iOS6(工作)和iOS7(不工作)中拍摄的图像 你们知道是什么导致了这个问题吗?这有什么解决办法吗 这并不是说iOS7中的centerOffset值不一致,而是偏移量不会改变它作为值接收到的任何内容 编辑:示例代码: - (void)viewDidLoad { [super viewDidLoad]; MapAnnotation *ann = [[MapAnno

因此,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;
}
-(void)viewDidLoad
{
[超级视图下载];
MapAnnotation*ann=[[MapAnnotation alloc]initWithName:@“一些注释”纬度:46.910068经度:17.881984标记:1类型:地图注释类型请求];
self.mapView.delegate=self;
[self.mapView addAnnotation:ann];
MKCircle*circle=[MKCircle circle with centercoordination:CLLocationCoordinate2DMake(46.910068,17.881984)半径:10];
[self.mapView addOverlay:circle];
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖{
if([overlay iskindof类:[MKCircle类]]){
MKCircleView*cv=[[MKCircleView alloc]initWithCircle:overlay];
cv.fillColor=[UIColor COLOR WITHRED:247/255.f绿色:85/255.f蓝色:86/255.f阿尔法:0.2];
cv.lineWidth=1;
cv.strokeColor=[UIColor-colorWithRed:247/255.f-green:85/255.f-blue:86/255.f-alpha:1.0];
返回cv;
}
返回零;
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{
//用户位置
if([annotation isKindOfClass:[MKUserLocation类]])
返回零;
//注释
MKPinAnnotationView*pinAnnotation=nil;
if(注释!=self.mapView.userLocation)
{
//退出pin的队列
静态NSString*defaultPinID=@“myPin”;
pinAnnotation=(MKPinAnnotationView*)[self.mapView出列可重用AnnotationViewWithIdentifier:defaultPinID];
if(pinAnnotation==nil)
pinAnnotation=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:defaultPinID];
pinAnnotation.image=[UIImage ImageName:@“订阅地图图标”];
pinAnnotation.centerOffset=CGPointMake(0,-20);
}
返回注释;
}
MapAnnotation
是一个简单的注释类,具有一些不相关的属性。

编辑:

@Anna Karenina让我意识到,我使用的是MKPinAnnotationView而不是MKAnnotationView。显然,MKPinAnnotation有一个烘焙的中心偏移量,这就是奇怪行为背后的原因

原始答案:

对于任何有相同问题的人来说,这似乎是iOS7中的一个bug

解决方法:

子类化
MKAnnotationView
并覆盖
centerOffset
属性的
setter方法

.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

不要错过顶部的
@synthesis
部分

我无法复制此问题(在iOS 7中,centerOffset似乎没有问题)。如果您愿意,请使用不起作用的代码更新问题。在viewForAnnotation中,您是否正在创建一个MKPinAnnotationView并设置其图像(而不是创建一个简单的MKAnnotationView,这是正确的做法)?MKPinAnnotationView应仅用于标准管脚,而不应设置其图像。我在从头开始项目并实现裸骨视图进行注释时遇到此错误事件。我更新了上面的问题。正如我所说,在viewForAnnotation中,使用自己的图像时创建一个普通的MKAnnotationView。不要创建MKPinAnnotationView。哦,你是对的,我还没有读完你的评论。非常感谢。有同样的问题,用你的答案解决了。谢谢@ZoltánMatók。原始答案是我在ios7中获得MKAnnotationView的唯一方法。如果可以的话,我会投票两次。从使用MKPinAnnotationView切换到MKAnnotationView,并错过了一次性更改。这里的内容相同:P我使用的是“MKPinAnnotationView”“MKAnnotationView”FACEPALM!是 啊我的代码中的确切错误是MKAnnotationView*annView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation-reuseIdentifier:@“CustomAnnotation”];谢谢你的解决方案。