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];
我有一个 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];