Я разделил на подклассы MKAnnotatonView
и переопределил методы initWithAnnotation:resueIdentifier
и drawRect
, чтобы добавить другое изображение за "передним" изображением.
Похоже, именно это предлагает нам класс MKAnnotationView
Apple.
Только то, что это сложно. Если вы создаете подкласс MKAnnotationView
, свойство изображения все еще существует. Они сделали что-то правильно, чтобы это было связано с рисованием. Возможно, они переопределили drawRect, чтобы нарисовать изображение ПОСЛЕ инициализации.
Кроме того, если вы не установите свойство изображения, рамка вашего пользовательского annotationView
будет установлена на размер 0, и метод drawRect
не будет вызван.
Наконец, Apple говорит, что изображения должны быть полностью заполнены, т.е. использовать прозрачный цвет для фона рисунков.
Итак: в вашем подклассе:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
if (self)
{
UIButton *rightButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(myShowAnnotationAddress:)
forControlEvents:UIControlEventTouchUpInside];
self.rightCalloutAccessoryView = rightButton;
self.canShowCallout = YES;
self.multipleTouchEnabled = NO;
self.frame = CGRectMake(0, 0, 65, 100);
self.backgroundColor = [UIColor clearColor];
return self;
}
return nil;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGPoint drawPoint = CGPointMake(0.0f, 0.0f);
UIImage *shadowImage = [UIImage imageNamed:@"shadow_image.png"];
[shadowImage drawAtPoint:drawPoint];
UIImage *frontImage = [UIImage imageNamed:@"front_image.png"];
[frontImage drawAtPoint:drawPoint];
CGContextRestoreGState(context);
}
После того как я сделал ответ, я понимаю, что вы действительно хотели отстать MKPinAnnotationView
. Мой ответ не тот, хотя он показывает, где рисование, возможно, должно быть сделано. Очевидно, MKPinAnnottions
имеет свой собственный метод рисования для представления булавки и ее тени.
Я думаю, что, вероятно, вы можете получить изображение Pin из свойства self.image. Что касается тени, я не уверен ... Это может быть использование метода рисования OPEN GL для добавления тени или просто комбинирование теневого изображения.
Наконец, изображение поставляется с анимацией. Я предполагаю, что именно здесь запускается анимация. Однако на данном этапе я не проверял.