У меня есть 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
здесь не просто так
UIGraphicsBeginImageContextWithOptions(src.size, NO, src.scale);
для сохранения масштаба исходного изображения. Почему мы должны перерисовывать новое изображение, чтобы использовать его для MKAnnotationView? 13.03.2015