Mám instance MKMapViewa chtěli pomocí ikon na zakázku anotace namísto standardních čepů ikony dodávané MKPinAnnotationView. Takže jsem nastavení podtřídy MKAnnotationView volal CustomMapAnnotation a jsem přepsání -(void)drawRect:k tomu CGImage. To funguje.
Problém nastává, když se snažím napodobit .animatesDropfunkčnost dodávaného MKPinAnnotationView; Byl bych rád za mé ikony objevují postupně klesl shora a zleva doprava pořadí, jsou-li anotace přidány k MKMapViewinstanci.
Zde je - (void) drawRect: pro CustomMapAnnotation, která funguje, když stačí nakreslit UIImage (což je to, co dělá druhá linie):
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
[((Incident *)self.annotation).smallIcon drawInRect:rect];
if (newAnnotation) {
[self animateDrop];
newAnnotation = NO;
}
}
Problém nastává, když přidáte animateDropmetodu:
-(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:@];
}
Je to prostě nefunguje, a tam by mohlo být mnoho důvodů, proč. Nebudu se dostat do všech z nich teď. Hlavní věc, kterou jsem chtěl vědět, je-li tento přístup je zvuk vůbec, nebo jestli bych měl zkusit něco úplně jiného.
Zkoušel jsem i balíček se celou věc do animačního transakce tak, že parametr beginTime by ve skutečnosti mohly fungovat; to vypadalo, že nebude dělat vůbec nic. Já nevím, jestli je to proto, že jsem chybí nějaký klíčový bod, nebo zda je to proto, MapKit je trashing mé animace nějak.
// Does nothing
[CATransaction begin];
[map addAnnotations:list];
[CATransaction commit];
Pokud má někdo nějaké zkušenosti s animovanými MKMapAnnotations jako je tento, rád bych nějaké rady, jinak, pokud můžete nabídnout CAAnimation rady ohledně přístupu, který by bylo příliš velké.













