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