MKAnnotationView 图像方向

MKAnnotationView image orientation

我有一个 MKMapView,我可以在其中拥有多个 ARDVenueAnnotationView(MKAnnotationView 的子类)和相同坐标的自定义图像。因此,这些注释重叠。我为此所做的是更改注释视图层的 anchorPoint。如下图所示(4 个居中的注释具有相同的坐标):

此外,我希望注释更改其图像方向,以便小图像尾部指向坐标(不要介意注释顺序):

我的问题来了,当我 setImage: 在我的注释视图上,用 + (UIImage *)imageWithCGImage:scale:orientation: 构建这个图像时,方向没有改变。这是我更新图像的代码:

- (void)updateImage
{
    UIImage *selectedImage = [UIImage imageNamed:@"redPin"];
    if (!self.isCluster && self.selected) {
        selectedImage = [UIImage imageNamed:@"whitePin"];
    }

    UIImageOrientation orientation;

    switch (self.anchorCorner) {
        case ARDVenueAnnotationAnchorCornerBottomLeft:
            orientation = UIImageOrientationUpMirrored;
        break;

        case ARDVenueAnnotationAnchorCornerTopLeft:
            orientation = UIImageOrientationDown;
        break;

        case ARDVenueAnnotationAnchorCornerTopRight:
            orientation = UIImageOrientationDownMirrored;
        break;

        default:
            orientation = UIImageOrientationUp;
        break;
    }
    UIImage *image = [[UIImage alloc] initWithCGImage:selectedImage.CGImage scale:selectedImage.scale orientation:orientation];
    [self setImage:image];
}

其中 anchorCorner 是 属性 当我希望注释视图移动以使图像小尾巴指向坐标时要设置的。 此方法永远不会改变图像方向(默认图像的尾巴在右下角)并且它会像上面的第一张图片一样渲染。

当我添加一个 UIImageView 作为我的注释视图的子视图时,它显示了良好的图像方向(如第二张图片所示)。

我的问题:

为什么setImage:不考虑图像方向?或者我做错了什么...

如何在不添加 UIImageView 作为子视图的情况下实现这一点?毕竟,image 属性 在这里是有原因的

尝试使用代码用原始图像创建图像:

static inline double radians (double degrees) {return degrees * M_PI/180;}
-(UIImage*) image :(UIImage*) src withOrientation: (UIImageOrientation) orientation
{
    UIGraphicsBeginImageContext(src.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    if (orientation == UIImageOrientationRight) {
        CGContextRotateCTM (context, radians(90));
    } else if (orientation == UIImageOrientationLeft) {
        CGContextRotateCTM (context, radians(-90));
    } else if (orientation == UIImageOrientationDown) {
        // NOTHING
    } else if (orientation == UIImageOrientationUp) {
        CGContextRotateCTM (context, radians(90));
    }

    [src drawAtPoint:CGPointMake(0, 0)];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

您可能还需要翻转图像,因此请使用此代码:

UIImage* flippedImage = [UIImage imageWithCGImage:image.CGImage 
                                            scale:image.scale
                                      orientation:UIImageOrientationUpMirrored];