У меня есть экземпляр MKMapView
, и я хотел бы использовать пользовательские значки аннотаций вместо стандартных значков выводов, предоставляемых MKPinAnnotationView. Итак, я установил подкласс MKAnnotationView с именем CustomMapAnnotation и переопределяю -(void)drawRect:
для рисования CGImage. Это работает.
Проблема возникает, когда я пытаюсь воспроизвести функциональность .animatesDrop
, предоставляемую MKPinAnnotationView; Я хотел бы, чтобы мои иконки появлялись постепенно, опускались сверху и слева направо, когда аннотации добавляются к экземпляру MKMapView
.
Вот - (void) drawRect: для CustomMapAnnotation, которая работает, когда вы просто рисуете UIImage (что и делает вторая строка):
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
[((Incident *)self.annotation).smallIcon drawInRect:rect];
if (newAnnotation) {
[self animateDrop];
newAnnotation = NO;
}
}
Проблема возникает при добавлении метода animateDrop
:
-(void)animateDrop {
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGPoint finalPos = self.center;
CGPoint startPos = CGPointMake(self.center.x, self.center.y-480.0);
self.layer.position = startPos;
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"position"];
theAnimation.fromValue=[NSValue valueWithCGPoint:startPos];
theAnimation.toValue=[NSValue valueWithCGPoint:finalPos];
theAnimation.removedOnCompletion = NO;
theAnimation.fillMode = kCAFillModeForwards;
theAnimation.delegate = self;
theAnimation.beginTime = 5.0 * (self.center.x/320.0);
theAnimation.duration = 1.0;
[self.layer addAnimation:theAnimation forKey:@""];
}
Это просто не работает, и может быть много причин, почему. Я не буду вдаваться во все из них сейчас. Главное, что я хотел бы знать, это то, что подход является правильным или я должен попробовать что-то совершенно другое.
Я также попытался упаковать все это в транзакцию анимации, чтобы параметр beginTime мог действительно работать; это, казалось, ничего не делало вообще. Я не знаю, так ли это, потому что мне не хватает какой-то ключевой точки или потому, что MapKit каким-то образом уничтожает мои анимации.
// Does nothing
[CATransaction begin];
[map addAnnotations:list];
[CATransaction commit];
Если у кого-то есть опыт работы с такими анимированными аннотациями MKMap, как этот, мне бы хотелось несколько советов, иначе, если вы сможете предложить совет CAAnimation по подходу, это тоже было бы здорово.