Я создал подклассы 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
имеет свой собственный метод рисования для представления булавки и ее тени.
Я думаю, что, вероятно, вы можете получить изображение булавки из свойства self.image. Что касается тени, я не уверен ... Это может быть метод рисования OPEN GL для добавления тени или просто комбинирование теневого изображения.
Наконец, изображение сопровождается анимацией. Я предполагаю, что именно здесь запускается анимация. Однако на данном этапе я не тестировал.
person
Yoichi
schedule
09.02.2010