Domanda

Sto cercando di simulare l'animazione posizione dell'utente in MapKit (dove-by la posizione dell'utente è rappresentata da un punto blu pulsante). Ho creato una sottoclasse personalizzata di MKAnnotationView e nel metodo drawRect Sto tentando di passare da un set di colori. Ecco un'implementazione più semplice di quello che sto facendo:

- (void)drawRect:(CGRect)rect {
float magSquared = event.magnitude * event.magnitude;
CGContextRef context = UIGraphicsGetCurrentContext();
if (idx == -1) {
    r[0] = 1.0; r[1] = 0.5; r[2] = 0;
    b[0] = 0; b[1] = 1.0; b[2] = 0.5;
    g[0] = 0.5; g[1] = 0; g[2] = 1.0;
    idx = 0;
}
// CGContextSetRGBFillColor(context, 1.0, 1.0 - magSquared * 0.015, 0.211, .6);
CGContextSetRGBFillColor(context, r[idx], g[idx], b[idx], 0.75);
CGContextFillEllipseInRect(context, rect);
idx++;
if (idx > 3) idx = 0;
}

Purtroppo questo solo fa sì che le annotazioni di essere uno dei 3 colori differenti e non lo fa passare da loro. C'è un modo per forzare le MKAnnotations per ridisegnare continuamente in modo che sembra essere animato?

È stato utile?

Soluzione

Si è liberi di chiamare setNeedsDisplay sulla vista annotazione ogni volta che si desidera ridisegnare. Il modo più semplice per farlo sarebbe per la vista annotazione stesso per impostare un timer che ha sparato ogni 1/60 ° di secondo o giù di lì.

Un approccio più sofisticato potrebbe essere quella di inserire il codice disegno in un CALayer personalizzato e applicare un'animazione Core Animation ripetendo ad esso. Vedere la mia risposta a "Animazione di una proprietà personalizzata di CALayer sottoclasse" per un approccio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top