MKAnnotationView图像方向

时间:2015-03-11 10:40:16

标签: ios image uiimageview orientation mkannotationview

我有一个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属性是有原因的

1 个答案:

答案 0 :(得分:0)

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

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];