0

同様の質問への回答で、ユーザーは次のことを行うように言いました。

これを修正するには、viewForAnnotation メソッドで次のことを行います。

// iOS6 BUG WORKAROUND !!!!!!!
if (is6orMore) {
     [annotationView setTransform:CGAffineTransformMakeRotation(.001)]; //any small positive rotation
}

このコードをいたるところに配置しようとしましたが、マップがパンされたときに注釈が回転します。これが私のコードです。

マップが回転するたびにこのメソッドを呼び出します

-(void)rotateAnnotations {

    for (id<MKAnnotation> annotation in self.mapView.annotations)
    {
        MKAnnotationView* annotationView = [self.mapView viewForAnnotation:annotation];

        [annotationView setTransform:CGAffineTransformMakeRotation(- self.mapRotationRadians)];
        if ([annotation isKindOfClass:[FlagAnnotation class]]) {
            [annotationView setSelected:YES animated:NO];
        }
         [annotationView setNeedsDisplay];  //ios6
    }
}

元の回答では、バグ回避コードを viewForAnnotation メソッドに入れると言っていました。これがそのコードです。

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

   if ([annotation isKindOfClass:[FlagAnnotation class]]) {

        // once flag is set allow for doubleTap zoom
        [self.mapView addGestureRecognizer:doubleTap];

        static NSString *AnnotationViewID = @"annotationViewID";
        MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

        if (!annotationView)
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
            annotationView.image = [UIImage imageNamed:@"FlagRed"];
            annotationView.draggable = YES;
            [self updateFlagCoordinate:(MKPlacemark *)annotationView.annotation];
            return annotationView;

        }
        else {
            [self updateFlagCoordinate:(MKPlacemark *)annotationView.annotation];
            annotationView.annotation = annotation;
        }

        // iOS6 BUG WORKAROUND !!!!!!!
        if (osVersion() >= 6) {
            [annotationView setTransform:CGAffineTransformMakeRotation(.001)];
        }

        return annotationView;
    }
    return nil;
}

よろしくお願いします。

ありがとう、マット

4

1 に答える 1

2

コードをもう少しいじってみると、viewForAnnotation 内の間違った場所にバグ修正があることがわかりました。ここにコードがありました:

if (!annotationView)
    {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
        annotationView.image = [UIImage imageNamed:@"FlagRed"];
        annotationView.draggable = YES;
        [self updateFlagCoordinate:(MKPlacemark *)annotationView.annotation];
        return annotationView;

    }
    else {
        [self updateFlagCoordinate:(MKPlacemark *)annotationView.annotation];
        annotationView.annotation = annotation;
    }

    // iOS6 BUG WORKAROUND !!!!!!!
    if (osVersion() >= 6) {
        [annotationView setTransform:CGAffineTransformMakeRotation(.001)];
    }

    return annotationView;

そして、私はそれをここに置く必要がありました:

if (!annotationView)
    {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
        annotationView.image = [UIImage imageNamed:@"FlagRed"];
        annotationView.draggable = YES;
        [self updateFlagCoordinate:(MKPlacemark *)annotationView.annotation];

        // iOS6 BUG WORKAROUND !!!!!!!
        if (osVersion() >= 6) {
            [annotationView setTransform:CGAffineTransformMakeRotation(.001)];
        }
        return annotationView;
    }

うまくいけば、同じ問題を抱えている人に役立ちます。

于 2013-01-10T20:59:55.673 に答える