Animazione di una sprite in una MKMapView

voti
2

Senza entrare in OpenGL (Quartz 2D è OK):

  1. Diciamo che ho un'immagine che voglio passare attraverso una mappa, in qualche modo fluido. Per esempio, l'immagine di un piano di volante in tutta la mappa. Sono stato in grado di farlo utilizzando un MKAnnotation, un NSTimer e giocherellare con il tasso di variazione lat / lon e velocità di timer. Tuttavia, suppongo questo non è l'ideale, anche se i risultati sembrano abbastanza decente. Si può pensare a un modo migliore?

  2. Ora diciamo che voglio questa immagine a essere animato (si pensi: gif animate). Non posso fare il solito UIImageView, con una serie di animationFramesperché tutto quello che ho accesso al MKAnnotationView è una UIImage. Come ti ragazzi affrontare questo?

Mi rendo conto che # 2 potrebbe essere gestita con un UIImageView sulla parte superiore della mappa che contiene le animationImages. Tuttavia, allora avrei dovuto gestire manualmente tradurre il movimento del piano o del razzo o qualsiasi altra cosa come la regione del mapview cambiato, a seconda dei movimenti degli utenti nel mondo reale, o l'utente lo zoom (lo scorrimento non è permesso nella mia app).

Cosa ne pensi?

È pubblicato 20/08/2009 alle 04:06
fonte dall'utente
In altre lingue...                            


1 risposte

voti
5

Credo di aver capito una soluzione al 2 #. I sottoclasse MKAnnotationView e ho scritto un po 'di codice per aggiungere un UIImageView (con immagini di animazione) come una visualizzazione secondaria.

//AnimatedAnnotation.h

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface AnimatedAnnotation : MKAnnotationView
{
    UIImageView* _imageView;
    NSString *imageName;
    NSString *imageExtension;
    int imageCount;
    float animationDuration;
}

@property (nonatomic, retain) UIImageView* imageView;
@property (nonatomic, retain) NSString* imageName;
@property (nonatomic, retain) NSString* imageExtension;
@property (nonatomic) int imageCount;
@property (nonatomic) float animationDuration;


- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageName:(NSString *)name imageExtension:(NSString *)extension imageCount:(int)count animationDuration:(float)duration
;

@end

//AnimatedAnnotation.m

#import "AnimatedAnnotation.h"

@implementation AnimatedAnnotation
@synthesize imageView = _imageView;
@synthesize imageName, imageCount, imageExtension,animationDuration;

- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier imageName:(NSString *)name imageExtension:(NSString *)extension imageCount:(int)count animationDuration:(float)duration
{
    self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
    self.imageCount = count;
    self.imageName = name;
    self.imageExtension = extension;
    self.animationDuration = duration;
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@0.%@",name,extension]];
    self.frame = CGRectMake(0, 0, image.size.width, image.size.height);
    self.backgroundColor = [UIColor clearColor];


    _imageView = [[UIImageView alloc] initWithFrame:self.frame];
    NSMutableArray *images = [[NSMutableArray alloc] init];
    for(int i = 0; i < count; i++ ){
        [images addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@%d.%@", name, i, extension]]];
    }


    _imageView.animationDuration = duration;
    _imageView.animationImages = images;
    _imageView.animationRepeatCount = 0;
    [_imageView startAnimating];

    [self addSubview:_imageView];

    return self;
}

-(void) dealloc
{
    [_imageView release];
    [super dealloc];
}


@end
Risposto il 20/08/2009 a 05:42
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more